整理复杂的URL调度程序

ban*_*ity 3 django django-urls

我有两种不同的对象,我想在同一个URL下生活.一组对象需要传递给视图函数'foo',另一组需要传递给'bar'.

我目前正在使用大量的硬编码网址,如此...

urlpatterns = patterns('project.views',
    (r'^a/$', 'foo'),
    (r'^b/$', 'foo'),
    (r'^c/$', 'foo'),
    #...and so on until...
    (r'^x/$', 'bar'),
    (r'^y/$', 'bar'),
    (r'^z/$', 'bar'),
)
Run Code Online (Sandbox Code Playgroud)

是否可以定义每种类型的URL列表,如...

foo_urls = ['a', 'b', 'c'] #...
bar_urls = ['x', 'y', 'z'] #...
Run Code Online (Sandbox Code Playgroud)

...然后根据这些列表检查传入的URL?(如果它在'foo_urls'中,发送到'project.views.foo';如果它在'bar_urls'中,发送到'project.views.bar')?

我仅限于保持此结构以保持与以前网站的URL的兼容性,但是对于简化我的urls.py的方法的任何建议将非常感激.

Ned*_*der 5

url映射通常是明确表达的,但它们不一定是.如何从列表中构建URL映射?

foo_urls = ['a', 'b', 'c'] #...
bar_urls = ['x', 'y', 'z'] #...

# A first pattern to get urlpatterns started.
urlpatterns = pattern('project.views', 
    ('blah', 'blah')
    )

# Append all the foo urls.
for foo_url in foo_urls:
    urlpatterns += patterns('project.views',
        ('^' + foo_url + '/$', 'foo')
        )

# Append all the bar urls.
for bar_url in bar_urls:
    urlpatterns += patterns('project.views',
        ('^' + bar_url + '/$', 'bar')
        )
Run Code Online (Sandbox Code Playgroud)