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

时间:2015-08-14 02:13:39

标签: python django django-templates django-settings

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

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

或者像

这样的非root用户安装

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

我找到的解决方案包括:

  1. 使用SITE_URL =
  2. 在settings.py中进行设置
  3. 在视图中引用settings.py。
  4. 最后使用 {{ SITE_URL }} 或其他内容在模板中访问它。
  5. 不是非常 D.R.Y。

    不要破坏声音,但是django不提供{{ GET_ME_THE_ROOT_URL }}参考?

    对不起,django训练我期待这样的好东西。

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

2 个答案:

答案 0 :(得分:4)

哈!好问题。

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

模板上下文处理器是您正在寻找的东西。 在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}},具体取决于您在ROOT_URL_YOU_WANT_TO_MENTION文件中为settings.py提供的值。

Django肯定会破坏每个人。但是提供了让你被宠坏的机制。

希望这能解决你的问题。

答案 1 :(得分:2)

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

在你的root urls.py中:

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

在template.html中:

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

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