代码之家  ›  专栏  ›  技术社区  ›  swilliams

Django:如何创建到视图的通用url路由?

  •  7
  • swilliams  · 技术社区  · 17 年前

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

    例如,假设我有以下观点: Project, Links, Profile, Contact urlpatterns 像这样:

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

    等等在里面 Pylons

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

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

    3 回复  |  直到 17 年前
        1
  •  5
  •   Javier    17 年前
    mods = ('Project','Links','Profile','Contact')
    
    urlpatterns = patterns('',
       *(('^%s/$'%n, 'mysite.app.views.%s'%n.lower()) for n in mods)
    )
    
        2
  •  5
  •   user3850 user3850    17 年前

    除非你有一个真正的 巨大的 从样式的角度来看,明确地写下视图的数量并不是太糟糕。

    patterns 功能:

    urlpatterns = patterns('mysite.app.views',
        (r'^Project/$', 'project'),
        (r'^Links/$', 'links'),
        (r'^Profile/$', 'profile'),
        (r'^Contact/$', 'contact'),
    )
    
        3
  •  5
  •   Mr Shark    17 年前

    您可能可以使用特殊的视图功能,如下所示:

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

    (r'^(?P<function>.+)/$', router, {"module": 'mysite.app.views'}),
    

    显式比隐式好。

    推荐文章