206 votes

Comment puis-je obtenir le nom de domaine de mon site dans un modèle Django ?

Comment obtenir le nom de domaine de mon site actuel à partir d'un modèle Django ? J'ai essayé de regarder dans la balise et les filtres mais rien n'y fait.

134voto

Carl Meyer Points 30736

Si vous souhaitez obtenir l'en-tête HTTP Host réel, consultez le commentaire de Daniel Roseman sur la réponse de @Phsiao. L'autre alternative est que si vous utilisez l'en-tête framework contrib.sites Vous pouvez définir un nom de domaine canonique pour un site dans la base de données (le mappage du domaine de la demande à un fichier de configuration avec le SITE_ID approprié est quelque chose que vous devez faire vous-même via la configuration de votre serveur Web). Dans ce cas, vous devez rechercher :

from django.contrib.sites.models import Site

current_site = Site.objects.get_current()
current_site.domain

vous devrez placer l'objet current_site dans un contexte de modèle vous-même si vous voulez l'utiliser. Si vous l'utilisez un peu partout, vous pourriez le regrouper dans un processeur de contexte de modèle.

119voto

danbruegge Points 183

J'ai découvert le {{ request.get_host }} méthode.

89voto

phsiao Points 629

Je pense que ce que vous voulez est d'avoir accès au contexte de la demande, voir RequestContext.

67voto

panchicore Points 3288

En complément de Carl Meyer, vous pouvez faire un processeur contextuel comme ceci :

module.context_processors.py

from django.conf import settings

def site(request):
    return {'SITE_URL': settings.SITE_URL}

local settings.py

SITE_URL = 'http://google.com' # this will reduce the Sites framework db call.

paramètres.py

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    "module.context_processors.site",
    ....
 )

modèles retournant l'instance de contexte l'url site est {{ SITE_URL }}

vous pouvez écrire votre propre routine si vous voulez gérer les sous-domaines ou SSL dans le processeur de contexte.

33voto

misterte Points 139

Je sais que cette question est ancienne, mais je suis tombé dessus en cherchant un moyen pythique d'obtenir le domaine actuel.

def myview(request):
    domain = request.build_absolute_uri('/')[:-1]
    # that will build the complete domain: http://foobar.com

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X