10
votes

Comment passer des variables à tous les modèles de Django?

J'essaie de passer des variables (variable de navigateur) à tous mes modèles de mon application. Tout conseiller sur la manière de le faire fonctionner?

Vue: P>

{% for prod in browser %} {{ prod }}, {% endfor %}


4 commentaires

Je ne sais pas si cela a quelque chose à voir avec cela, mais c'est étrange que votre fonction est nommée navigateur et vous attribuez également à une variable appelée Navigateur . J'ai fait des expériences dans une coquille Python et que cela ne semble pas être le problème, mais vous voudrez peut-être le changer pour le rendre moins déroutant.


Assurez-vous également que votre liste n'est pas vide. Essayez d'utiliser le débogueur ou d'imprimer la valeur à votre vue.


Et, vous demandez vraiment comment obtenir des variables à apparaître dans tous les modèles ou pourquoi dans ce cas particulier, le navigateur ne fonctionne pas?


@Briannéal J'avais initialement voulu savoir pourquoi la variable du navigateur n'était pas transmise à la base.html. Cela me permettrait efficacement d'utiliser la variable sur tous les modèles, ce qui est vraiment ce que j'essaie de faire.


3 Réponses :


4
votes

Actuellement, vous passez actuellement locals () code> comme une portée variable qui devrait inclure navigateur code> aswell, mais je trouve l'utilisation de locaux () code > Très laid.

Personnellement, je préfère toujours un motif comme celui-ci à la place: P>

def browser(request):
    context = RequestContext(request)

    primary_cat_list = Categories.objects.order_by("category")
    subcat_list = SubCategories.objects.order_by("sub_category")
    product = Productbackup.objects.order_by("website")
    browser =  list(chain(primary_cat_list, subcat_list, product))

    context['browser'] = browser

    return render_to_response('reserve/templates/base.html', context_instance=context)


2 commentaires

Cela ne semble pas fonctionner ... base.html n'affiche toujours rien.


@sharataka: Dans ce cas, peut-être que la liste est simplement vide? Et si vous faites quelque chose comme ceci: navigateur = ["spam", "œufs"] ?



14
votes

Vous, mon ami, êtes sur le marché des processeurs de contexte

de une entrée de blog écrit par un très nimbler et Erudite Technical Writer que moi:

quels sont les processeurs de contexte de modèle?

Les processeurs de contexte de Django sont une installation qui vous permet de fournir des données et des rappels à vos modèles.

Vous pouvez le faire de deux manières:

  • Sur demande individuelle: en passant un contexte Custom à votre rendu_to_response () appel
  • globalement: en créant une méthode de processeur de contexte qui accepte un objet httpRequest comme entrée et renvoie une charge utile ou un rappel, puis Enregistrement du processeur de contexte dans votre Params.py , puis fournissez votre rendu_to_response () appel avec l'attribut DemandeContext au lieu de votre propre (vous pouvez toujours prolonger demandeContext pour ajouter plus de données sur une demande individuelle du cours).

    Si cette approche pour réussir les données aux modèles semblait absurde et obscurcée, vous n'êtes pas seul. La complexité impliquée dans une opération aussi simple est injustifiée et contre-productive, mais chaque système a ses lacunes.

    La documentation officielle est ici:

    https://docs.djangoproject.com/fr/dev/ref/templated/api/

    Ainsi, mais oui, je suis en train de programmer avec Django pendant un moment et une des raisons pour lesquelles j'aime vraiment la résolution de problèmes avec laquelle c'est parce qu'il est presque byzantin dans sa complexité, mais pas de manière dominante. Il a une tonne de geegaws et de doodads qui peuvent ne pas être immédiatement utiles; Chacune d'entre elles est extrêmement pratique lorsque vous en avez besoin, et cela restera hors de votre chemin sinon.

    Le résultat ici pour vous est: les processeurs contextuels sont un bon exemple de ceux-ci. Oui.


1 commentaires

N'était-ce pas si ce que l'OP demandait? ... Je suis enclin à être d'accord sur un niveau personnel avec une overcilleuse de R / T, car je ne travaille pas généralement de cette façon. Mais je ne peux pas dire avec certitude de quelque manière que ce soit, il est donc préférable de partir en tant qu'en aventure des programmeurs, l'expérience éducative dont je pouvais faire de loin les commentaires que je pourrais faire. Quoi qu'il en soit, c'est pourquoi j'ai ajouté le ¶ à la fin, car la Q ressemblait à une personne qui explorait le cadre autant que la résolution d'un problème technique spécifique.



4
votes

Je peux vous donner un exemple de mon code, cela fonctionne bien. Voici le fichier nommé context_processorsors.py :

context_processorsors.py xxx

et c'est une partie de ma base.html (un modèle qui J'utilise wor toutes mes pages)

base.html xxx


0 commentaires