python - 如何使用一个应用程序满足 Django 中的多个 URL

标签 python django django-urls

我正在尝试使用一个应用程序来满足多个 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/

相关文章:

python - 抓取站点为链接返回不同的 href

python - Cython numpy 数组索引

python 正则表达式 [新手]

django - 如何过滤 Django 查询集中的空值?

python - 在django中使用id作为url有什么解决方案吗?

python - 无法让 Django 网址工作

python - 如果其他列中存在值,则在数据框中创建列

javascript - 如何获取模型表单按钮的点击事件?

php - 如何在我现有的 Django Web 应用程序之上集成 wordpress 前端

python - Django ListView 中当前用户对象的列表