我刚开始在Django中命名我的URL模式,所以如果我想更改URL模式,我只需要在一个地方更改它。 e.g:
url(r'^$', HomeListView.as_view(), name='home'),
并在我的模板中引用它:
{% url home %}
如果更改或我更改了Facebook页面链接,是否可以使用外部链接。这看起来怎么样?
由于
答案 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
以查看当前用户是否可以看到所有网址。