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

Current way to get Home URL (Domain) in Django Template?

这么简单,好像没有提供。

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

或者像

这样的非根安装

...我认为 django 会知道这一点并且在模板中有一个常量可用。

我找到的解决方案涉及:

  1. 在 settings.py 中设置为 SITE_URL =
  2. 在视图中引用 settings.py。
  3. 最终在模板中使用 {{ SITE_URL }} 或其他方式访问它。

不太D.R.Y.

不要听起来被宠坏了,但 django 不提供 {{ GET_ME_THE_ROOT_URL }} 参考吗?

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

只是说,如果我正在编写一个框架,这将是我做的第一件事,除了在我的桌子旁边放一个小冰箱,里面装满了热袋和一个安全但距离很近的微波炉。

如果您从请求中呈现模板,您可以只命名您的根视图,然后使用 url 标签引用它:

在你的根目录中 urls.py:

url(r'^$', HomePageView.as_view(), name='home'),

在template.html中:

click <a href="{% url 'home' %}">here</a> 

django 文档中的更多有用信息:https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#url

哈!好问题。

让我们分解你的问题。您希望某些数据在项目中可用的所有模板中可用。而且,您希望提供一次值,而不是在多个视图中重复它。

模板上下文处理器正是您要找的东西。 在您的 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"
)

然后,在 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}

而且,在每个模板中,上下文中都会有一个 {{SITE_URL}},具体取决于您在 settings.py 文件中提供给 ROOT_URL_YOU_WANT_TO_MENTION 的值。

Django 确实宠坏了所有人。但是提供了让你被宠坏的机制。

希望这能解决您的问题。