当前在 Django 模板中获取主页 URL(域)的方法?
Current way to get Home URL (Domain) in Django Template?
这么简单,好像没有提供。
基本上,如果我的网站是...
或者像
这样的非根安装
...我认为 django 会知道这一点并且在模板中有一个常量可用。
我找到的解决方案涉及:
- 在 settings.py 中设置为
SITE_URL =
- 在视图中引用 settings.py。
- 最终在模板中使用
{{ 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 确实宠坏了所有人。但是提供了让你被宠坏的机制。
希望这能解决您的问题。
这么简单,好像没有提供。
基本上,如果我的网站是...
或者像
这样的非根安装...我认为 django 会知道这一点并且在模板中有一个常量可用。
我找到的解决方案涉及:
- 在 settings.py 中设置为
SITE_URL =
- 在视图中引用 settings.py。
- 最终在模板中使用
{{ 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 确实宠坏了所有人。但是提供了让你被宠坏的机制。
希望这能解决您的问题。