我有一个非常标准的django应用程序,我想知道如何设置url路由,这样我就不必将每个url显式映射到视图。

例如,假设我有以下视图: Project,Links,Profile,Contact 。我宁愿不让我的 urlpatterns 看起来像这样:

(r'^Project/

等等。在 Pylons 中,它将如下所示:

map.connect(':controller/:action/:id')

它会自动获取正确的控制器和功能。 Django中有类似的东西吗?

, 'mysite.app.views.project'), (r'^Links/

等等。在 Pylons 中,它将如下所示:

<*>

它会自动获取正确的控制器和功能。 Django中有类似的东西吗?

, 'mysite.app.views.links'), (r'^Profile/

等等。在 Pylons 中,它将如下所示:

<*>

它会自动获取正确的控制器和功能。 Django中有类似的东西吗?

, 'mysite.app.views.profile'), (r'^Contact/

等等。在 Pylons 中,它将如下所示:

<*>

它会自动获取正确的控制器和功能。 Django中有类似的东西吗?

, 'mysite.app.views.contact'),

等等。在 Pylons 中,它将如下所示:

<*>

它会自动获取正确的控制器和功能。 Django中有类似的东西吗?

有帮助吗?

解决方案

mods = ('Project','Links','Profile','Contact')

urlpatterns = patterns('',
   *(('^%s/%n, 'mysite.app.views.%s'%n.lower()) for n in mods)
)

其他提示

除非你有一个非常巨大的数量的观点,从风格的角度来看,明确地写下它们并不是太糟糕。

但是,您可以使用 patterns 函数的prefix参数缩短您的示例:

urlpatterns = patterns('mysite.app.views',
    (r'^Project/, 'project'),
    (r'^Links/, 'links'),
    (r'^Profile/, 'profile'),
    (r'^Contact/, 'contact'),
)

您可以沿着这些方向使用特殊的视图功能:

def router(request, function, module):
    m =__import__(module, globals(), locals(), [function.lower()])
    try:
        return m.__dict__[function.lower()](request)
    except KeyError:
        raise Http404()

然后是这样的urlconf:

(r'^(?P<function>.+)/

此代码未经测试,但总体思路应该有效,即使您应该记住:

明确胜过隐含。

, router, {"module": 'mysite.app.views'}),

此代码未经测试,但总体思路应该有效,即使您应该记住:

明确胜过隐含。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top