这很简单,但似乎没有提供。
基本上,如果我的网站是......
或者像
这样的非root用户安装......我认为django会知道这一点并且在模板中有一个常量。
我找到的解决方案包括:
SITE_URL =
{{ SITE_URL }}
或其他内容在模板中访问它。不是非常 D.R.Y。
不要破坏声音,但是django不提供{{ GET_ME_THE_ROOT_URL }}
参考?
对不起,django训练我期待这样的好东西。
只是说'如果我正在写一个框架,这将是我做的第一件事,除了在我的桌子旁边放一个小冰箱,里面装满了热水袋和一个安全但距离很近的微波炉。
答案 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