【问题标题】:Is it possible to give external URLs names in django是否可以在 django 中提供外部 URL 名称
【发布时间】:2014-02-24 19:14:48
【问题描述】:

我刚刚开始在 Django 中命名我的 URL 模式,所以如果我想更改 URL 模式,我只需在一个地方进行更改。例如:

url(r'^$', HomeListView.as_view(), name='home'),

并像这样在我的模板中引用它:

{% url home %}

如果外部链接发生变化,或者我更改 Facebook 页面链接,这是否可能。这看起来如何?

谢谢

【问题讨论】:

  • 顺便说一句,请确保在模板中引用命名的 URL 模式,因此 {% url home %} 将变为 {% url "home" %}。这是 Django 1.5 的默认语法。 Details

标签: django url hyperlink external


【解决方案1】:

一种方法是编写一个 external_url 模板标签,并使用一个 ExternalURL 模型来存储它们。

这将使您能够在不重新部署更改的代码的情况下编辑网址。

缺点是会有数据库查找来查看这些 url。此外,您需要在要使用它的模板中{% load external_urls %}

# models.py pseudo-code

class ExternalURL(models.Model):
    name = models.CharField(unique=True)
    url = models.URLField()

您的模板标签可能类似于:

# app/templatetags/external_url.py

@library.register()
def external_url(name):
    try:
        return ExternalURL.objects.get(name=name).url
    except ExternalURL.DoesNotExist:
        return ''

另一种选择是使用上下文处理器将它们全部存储在上下文中,这样您就不必将它们显式传递到视图中:如果您有多个在系统中的许多地方使用的外部 url,这将很有用.

def external_urls(request):
    return {
        'google': 'http://www.google.com/',
        # more here
    }

这样做的好处是无需数据库查找,无需加载模板标签,但您需要将其添加到您的settings.CONTEXT_PROCESSORS。此外,您可以检查request 以查看当前用户是否可以看到所有网址。

【讨论】:

    【解决方案2】:

    如果它的外部链接和更改的可能性,那么您应该在设置中定义它或单独的静态 url 文件并将这些变量与请求上下文一起传递。

    urls.py 应建议仅用于您的应用特定的 url。

    在这个SO thread 你可以看到如何定义常量

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      相关资源
      最近更新 更多