在Django模板中获取家庭URL(域)的当前方法?

1Up*_*1Up 4 python django django-templates django-settings

这很简单,但似乎没有提供。

基本上,如果我的网站是...

或非root用户安装

...我想django会知道这一点,并在模板中有一个常量。

我发现的解决方案涉及:

  1. 使用以下命令在settings.py中进行设置 SITE_URL =
  2. 在视图中参考settings.py。
  3. 最后使用{{ SITE_URL }}或其他方式在模板中访问它。

不是很

听起来不错,但是django不提供{{ GET_ME_THE_ROOT_URL }}参考吗?

抱歉,django已经训练我期待这样的好吃的东西。

只是说'如果我正在写一个框架,那是我要做的第一件事,除了在我的桌子旁边放一个小冰箱,里面装满了热钱包,还有一个微波炉,但距离很近但很安全。

Ani*_*rma 6

哈!好问题。

让我们分解您的问题。您希望项目中所有可用模板中的某些数据都可用。而且,您只想提供一次值,而不要在视图之间重复。

模板上下文处理器是您要找的东西。在您的settings.py文件中,将新的context_processor添加到的列表中TEMPLATE_CONTEXT_PROCESSORS

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.media",
    "django.core.context_processors.request",
    "django.contrib.messages.context_processors.messages",
    "your_app.context_processors.root_url"
)
Run Code Online (Sandbox Code Playgroud)

然后,在内部your_app创建一个名为的文件context_processors.py。该文件将包含以下代码。

from django.conf import settings

def root_url(request):
    """
    Pass your root_url from the settings.py
    """
    return {'SITE_URL': settings.ROOT_URL_YOU_WANT_TO_MENTION}
Run Code Online (Sandbox Code Playgroud)

并且,在每个模板中,{{SITE_URL}}根据您ROOT_URL_YOU_WANT_TO_MENTIONsettings.py文件中提供的值,您将在上下文中显示一个内容。

Django肯定会破坏所有人。但是提供了使您变宠的机制。

希望这能解决您的问题。