当前在 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(域)的方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 模板中获取当前 URL?

如何在 Django 模板中获取当前 URL?

Django 模板:获取另一种语言的当前 URL

Django——有没有办法从模板中引用/获取当前页面 URL? [复制]

Django模板:使用其他语言获取当前URL

如何在 GAE 模板中获取当前页面的 url