【问题标题】:Current way to get Home URL (Domain) in Django Template?当前在 Django 模板中获取主页 URL(域)的方法?
【发布时间】:2015-11-07 04:36:42
【问题描述】:

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

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

或者像

这样的非 root 安装

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

我找到的解决方案包括:

  1. 在 settings.py 中使用SITE_URL = 进行设置
  2. 在视图中引用 settings.py。
  3. 最后在模板中用{{ SITE_URL }}之类的东西访问。

不是很D.R.Y.

听起来不错,但 django 不提供 {{ GET_ME_THE_ROOT_URL }} 参考吗?

抱歉,django 训练我期待这样的好东西。

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

【问题讨论】:

    标签: python django django-templates django-settings


    【解决方案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' %} 调用它。更新了答案以反映这一点。
      猜你喜欢
      • 2011-02-22
      • 2023-03-29
      • 1970-01-01
      • 2010-10-23
      • 2019-09-04
      • 2017-04-26
      相关资源
      最近更新 更多