当前在 Django 模板中获取主页 URL(域)的方法?
Posted
技术标签:
【中文标题】当前在 Django 模板中获取主页 URL(域)的方法?【英文标题】:Current way to get Home URL (Domain) in Django Template? 【发布时间】:2015-11-07 04:36:42 【问题描述】:这很简单,但似乎没有提供。
基本上,如果我的网站是...
http://www.example.com http://127.0.0.1:8000或者像
这样的非 root 安装 http://www.example.com/ye-ol-django/ http://127.0.0.1:8000/ye-ol-django/...我认为 django 会知道这一点并在模板中提供一个常量。
我找到的解决方案包括:
-
在 settings.py 中使用
SITE_URL =
进行设置
在视图中引用 settings.py。
最后在模板中用 SITE_URL
之类的东西访问。
不是很D.R.Y.
听起来不错,但 django 不提供 GET_ME_THE_ROOT_URL
参考吗?
抱歉,django 训练我期待这样的好东西。
只是说'如果我正在编写一个框架,那将是我做的第一件事,除了在我的桌子旁边放一个小冰箱,里面放满了火锅和一个安全但很近的微波炉。
【问题讨论】:
【参考方案1】:哈!好问题。
让我们分解您的问题。您希望在项目中可用的所有模板中都可以使用一些数据。此外,您希望提供一次值,而不是在视图之间重复。
模板上下文处理器是您正在寻找的东西。
在您的 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 肯定会宠坏所有人。但提供了让你被宠坏的机制。
希望这能解决您的问题。
【讨论】:
【参考方案2】:如果您从请求中呈现模板,您只需命名您的根视图,然后使用 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
【讨论】:
我得到了那个部分,但是如果我有一个样式表并且我想给它一个完整的 url,我如何访问那个 localhost 或 web base?现在它以“/”开头,这可能会很棘手,特别是如果它最终是非 root 安装。 哦,伙计。我明白你的意思了。在 urls.py 中,您只需将基本 url 命名为:url(r'^$', HomePageView.as_view(), name='home')
,然后使用% url 'home' %
调用它。更新了答案以反映这一点。以上是关于当前在 Django 模板中获取主页 URL(域)的方法?的主要内容,如果未能解决你的问题,请参考以下文章