是否可以在django中提供外部URL名称

时间:2014-01-31 22:19:29

标签: django url hyperlink external

我刚开始在Django中命名我的URL模式,所以如果我想更改URL模式,我只需要在一个地方更改它。 e.g:

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

并在我的模板中引用它:

{% url home %}

如果更改或我更改了Facebook页面链接,是否可以使用外部链接。这看起来怎么样?

由于

2 个答案:

答案 0 :(得分:1)

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

建议您将urls.py仅用于特定于应用的网址。

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

答案 1 :(得分:1)

执行此操作的一种方法是编写external_url模板标记,并使用ExternalURL模型存储它们。

这样,您就可以在不重新部署更改的代码的情况下编辑网址。

缺点是会有数据库查找来查看这些网址。此外,您需要在要使用它的模板中{% 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 ''

另一种选择可能是让一个Context Processor将它们全部存储在上下文中,这样你就不必将它们显式地传递给视图:如果你有几个在系统中很多地方使用过的外部url会很有用

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

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