如何使用一個應用程序滿足Django中的多個URL

2024-10-01 11:33:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用一个应用程序来满足多个url路径。也就是说,我希望url /blog/和{}使用相同的应用程序,但视图不同。我相信有很多方法可以做到这一点,但没有一种是非常干净的。这就是我现在要做的

# /urls.py
urlpatterns = patterns("",
    (r"^(blog|job)/", include("myproject.myapp.urls")),
)

# /myapp/urls.py
urlpatterns = patterns("myproject.myapp.views",
    (r"^(?P<id>\d+)/edit/$",    "myproject.myapp.views.edit"),
    (r"^(?P<id>\d+)/delete/$",  "myproject.myapp.views.delete"),
    (r"^(?P<id>\d+)/update/$",  "myproject.myapp.views.update"),
    (r"^insert/$",              "myproject.myapp.views.insert"),
)

urlpatterns += patterns("",
    (r"^(?P<object_id>\d+)/$",  "django.views.generic.list_detail.object_detail", info_dict, "NOIDEA-detail"),
    (r"^/$",                    "django.views.generic.list_detail.object_list",   info_dict, "NOIDEA-community"),
)

# /myapp/views.py
def edit(request, type, id):
    if (type == "blog"):
        editBlog(request, id)
    else (type == "job")
        editJob(request, id)

def editBlog(request, id):
    # some code

def editJob(request, id):
    # some code

为了使代码更干净,我最后将所有这些分解为多个模型和视图文件,但是上面的示例没有考虑到反向url查找之类的事情,它破坏了我所有的模板{% url %}调用。在

最初,我的博客、工作、活动、竞赛等等都在它们自己的应用程序中,但它们的功能都是如此相似,以至于让它这样没有意义,所以我试图将它们结合起来。。。就这样发生了。你看到那些“NOIDEA detail”和“NOIDEA community”的url名称了吗?是的,我不知道在那里用什么:-(


Tags: pyid应用程序urlrequestmyprojectblogedit
2条回答

我觉得不错。如果您想要反向查找,只需为每个url格式使用不同的反向名称,即使它们最终指向同一个视图。在

可以有多个模块定义url。在myapp/urls.py中可以有/blog/的url,在myapp/job_urls.py中可以有/job/的url。或者在urls子包中有两个模块。在

或者,您可以手动为url定义添加前缀:

urlpatterns = patterns("myproject.myapp.views",
    (r"^jobs/(?P<id>\d+)/edit/$",    "myproject.myapp.views.edit"),
    (r"^jobs/(?P<id>\d+)/delete/$",  "myproject.myapp.views.delete"),
    (r"^jobs/(?P<id>\d+)/update/$",  "myproject.myapp.views.update"),
    (r"^jobs/insert/$",              "myproject.myapp.views.insert"),
)

urlpatterns += patterns("",
    (r"^blog/(?P<object_id>\d+)/$",  "django.views.generic.list_detail.object_detail", info_dict, "NOIDEA-detail"),
    (r"^blog/$",                    "django.views.generic.list_detail.object_list",   info_dict, "NOIDEA-community"),
)

然后安装为:

^{pr2}$

但就个人而言,我会选择更多的restfulurl定义。例如blog/(?P<post_id>\d+)/edit/$。在

相关问题 更多 >