【发布时间】:2010-12-27 12:29:41
【问题描述】:
我正在尝试掌握Django URL namespaces 的窍门。但我找不到任何示例或文档。
这是我尝试过的。
urls.py:
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^foo/', include('sub_urls', namespace='foo', app_name='foo')),
(r'^bar/', include('sub_urls', namespace='bar', app_name='bar')),
)
sub_urls.py:
from django.conf.urls.defaults import patterns, url
from views import view1
urlpatterns = patterns('views',
url(r'^(?P<view_id>\d+)/$', view1, name='view1')
)
views.py:
from django.shortcuts import render_to_response
def view1(request, view_id):
return render_to_response('view1.html', locals())
在 view1.html 中,{% url foo:view1 3 %} 输出 /foo/3,{% url bar:view1 3 %} 输出 /bar/3。无论我浏览到 /foo/X 还是 /bar/X,这都是正确的。
我想要的是能够浏览到 /foo/X 或 /bar/X,并让 {% url view1 3 %} 分别输出 /foo/3 或 /bar/3。
【问题讨论】:
-
我这样做的原因是我可以让两个命名空间使用不同的 CSS 文件。 IE。在 /foo 下浏览会包含 foo.css,/bar 会包含 bar.css。
-
我知道,拥有相同内容的不同网址肯定会让您的网站在搜索引擎上受到惩罚。我不知道这是否对您来说是一个问题,但如果是,我建议您以其他方式解决这个问题。也许你可以在客户端设置一个cookie,让他们以其他方式选择css样式。
-
我最终设置了基于不同子域的 CSS。本地测试很痛苦,需要主机文件条目。
-
请注意,命名空间是为 disambiguation 制作的:即使视图 names 冲突(和通过命名空间前缀这样做)。您在上面要求的内容可能被视为'歧义':根据上下文,故意使用单个视图名称来引用两个不同视图对象中的任何一个。混合这两个目标对我来说听起来并不像pythonic。
标签: django django-urls