我正在尝试使用一个应用程序来满足多个 url 路径。也就是说,我希望 url /blog/
和 /job/
使用相同的应用程序,但 View 不同。我敢肯定,有多种方法可以做到这一点,但它们似乎都不是很干净。这是我现在正在做的事情
# /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
我最终将所有这些分解成多个模型和 View 文件以使代码更清晰,但上面的示例没有考虑反向 url 查找之类的事情,这会破坏我的所有模板 {% url % }
调用。
最初,我的博客、工作、事件、竞赛等都存在于它们自己的应用程序中,但它们的所有功能都非常相似,以这种方式保留它没有意义,所以我尝试将它们结合起来他们……这就发生了。您在我的通用 View 中看到那些“NOIDEA-detail”和“NOIDEA-community”网址名称了吗?是的,我不知道在那里用什么:-(
最佳答案
您可以有多个定义 URL 的模块。你可以有 /blog/
myapp/urls.py
中的网址和 /job/
myapp/job_urls.py
中的网址.或者你可以在 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"),
)
然后将它们挂载为:
urlpatterns = patterns("",
(r"", include("myapp.urls")),
)
但就我个人而言,我会选择更多 RESTful URL 定义。如blog/(?P<post_id>\d+)/edit/$
.
关于python - 如何使用一个应用程序满足 Django 中的多个 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2094952/