【问题标题】:In Django, can you automatically map URLs to view methods?在 Django 中,您可以自动将 URL 映射到视图方法吗?
【发布时间】:2011-07-21 21:30:40
【问题描述】:

鉴于这样的观点:

# my_app/views.py
def index(request):
    ...
def list(request):
    ...
def about(request):
    ...

而不是在urls.py 中为视图中的每个方法显式声明 url:

# urls.py
url(r'^index$', 'my_app.views.index'),
url(r'^list$', 'my_app.views.list'),
url(r'^about$', 'my_app.views.about'),
...

是否可以只为 URL 调度程序提供视图 (my_apps.views) 并让它处理所有视图的方法?

【问题讨论】:

    标签: django django-urls


    【解决方案1】:

    我想您可以拥有一个捕获 url 正则表达式的视图,

    r'^(?P<viewtype>index|list|about)/$', 'myview'

    带有处理捕获参数的视图。

    def myview(request, viewtype):
        if viewtype == 'index':
              return http.HttpResponse("I'm the index view")
        elif viewtype == 'list':
              return http.HttpResponse("I'm the list view')
    

    但为了清晰起见,我真的建议您将视图逻辑分开。遵循 3 个具有特定功能的不同视图比 3 个 if / then 语句要容易得多。

    【讨论】:

    • 是的,我坚持使用每个视图方法的显式声明。我没有太多东西需要清理我的urls.py。谢谢!
    • 我认为这是正确的选择 :) 对我来说,如果我需要清理 urls.py,我会使用 include(new_urls) 并在与视图相同的应用程序中保留一个新的 url。
    • 优点是它在开发中非常有用,因为您不断添加/删除视图方法,而不必考虑将 urls.py 与视图中的方法同步。例如,PlayFramework 通过允许您将 url 片段解析为控制器/方法名称来实现这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多