【问题标题】:Newly created Django url's not working新创建的 Django url 不起作用
【发布时间】:2016-03-09 17:52:17
【问题描述】:

新创建的 Django url 没有运行。我无法弄清楚为什么这些新网址不起作用。我创建了视图和模板,然后将它们添加到我的 url,我收到以下错误

Request Method: GET
Request URL:    http://localhost:8000/posts/dcma/
Raised by:  posts.views.post_detail

我不明白为什么 post_detail 会引发问题。

这是我的帖子/网址

from django.conf.urls import url, include
from .views import post_create, post_detail, \
post_list, post_update, \
post_delete, post_search, tag_list, \
search_title, display_hay, \
submit_video, privacy, terms, dcma

urlpatterns = [
  url(r'^$', post_list, name='list'),
  url(r'^create/$', post_create, name='create'),
  url(r'^haystack/$', display_hay, name='haystack'),
  url(r'^search_f/$', search_title),
  url(r'^search_results/$', post_search, name='search-page'),
  url(r'^tag/(?P<slug>[\w-]+)/$', tag_list, name="tag_list"),
  url(r'^(?P<slug>[\w-]+)/$', post_detail, name='detail'),
  url(r'^(?P<slug>[\w-]+)/edit/$', post_update, name='update'),
  url(r'^(?P<id>\d+)/delete/$', post_delete, name='delete'),

  url(r'^submit_video/$', submit_video, name='submit_video'),
  url(r'^privacy/$', privacy, name='privacy'),
  url(r'^terms/$', terms, name='terms'),
  url(r'^dcma/$', dcma, name='dcma'),
# url(r'^search/', include('haystack.urls')),
]

我的观点.py

def display_hay(request):
all_results = SearchQuerySet().all()
template = "posts/display_hay.html"
context = {
    "all_results": all_results,
}
return render(request, template, context)


  def submit_video(request):
   template = "posts/submit_video.html"
   context = {
   }
   return render(request, template, context)


   def privacy(request):
   template = "posts/privacy.html"
   context = {
   }
   return render(request, template, context)


  def terms(request):
   template = "posts/terms.html"
   context = {
   }
   return render(request, template, context)


  def dcma(request):
   template = "posts/dcma.html"
   context = {
   }
   return render(request, template, context)

如何更正我的语法?欢迎所有指导

【问题讨论】:

    标签: python django url


    【解决方案1】:

    Django 按照定义的顺序尝试您的 url,并使用第一个匹配项。在这种情况下,您有以下网址:

    url(r'^(?P<slug>[\w-]+)/$', post_detail, name='detail'),
    ...
    
    url(r'^submit_video/$', submit_video, name='submit_video'),
    url(r'^privacy/$', privacy, name='privacy'),
    url(r'^terms/$', terms, name='terms'),
    url(r'^dcma/$', dcma, name='dcma'),
    

    后面的任何 url 也与 post_detail 视图的 url 模式匹配。 post_detail 视图然后尝试找到与 slug 匹配的帖子,但它找不到,并引发 Http404。当第一个匹配视图引发错误时,不会调用其他模式的视图。

    要解决此问题,您可以执行以下两项操作之一。要么更改 post_detail 的 url 模式,使其与其他模式不冲突,要么将最后四个模式向上移动到 post_detail 模式上方。在后一种情况下,您不能将任何冲突的 url 用作帖子的 slug。

    【讨论】:

      【解决方案2】:

      我想通了。我不知道为什么它被否决了。但问题是由url的顺序引起的。所以而不是这个

      urlpatterns = [
        url(r'^$', post_list, name='list'),
        url(r'^create/$', post_create, name='create'),
        url(r'^haystack/$', display_hay, name='haystack'),
        url(r'^search_f/$', search_title),
        url(r'^search_results/$', post_search, name='search-page'),
        url(r'^tag/(?P<slug>[\w-]+)/$', tag_list, name="tag_list"),
        url(r'^(?P<slug>[\w-]+)/$', post_detail, name='detail'),
        url(r'^(?P<slug>[\w-]+)/edit/$', post_update, name='update'),
        url(r'^(?P<id>\d+)/delete/$', post_delete, name='delete'),
      
        url(r'^submit_video/$', submit_video, name='submit_video'),
        url(r'^privacy/$', privacy, name='privacy'),
        url(r'^terms/$', terms, name='terms'),
        url(r'^dcma/$', dcma, name='dcma'),
      # url(r'^search/', include('haystack.urls')),
      

      就是这个

      urlpatterns = [
         url(r'^$', post_list, name='list'),
         url(r'^create/$', post_create, name='create'),
         url(r'^dcma/$', dcma, name='dcma'),
         url(r'^submit_video/$', submit_video, name='submit_video'),
         url(r'^privacy/$', privacy, name='privacy'),
         url(r'^terms/$', terms, name='terms'),
      
         url(r'^haystack/$', display_hay, name='haystack'),
         url(r'^search_f/$', search_title),
         url(r'^search_results/$', post_search, name='search-page'),
         url(r'^tag/(?P<slug>[\w-]+)/$', tag_list, name="tag_list"),
         url(r'^(?P<slug>[\w-]+)/$', post_detail, name='detail'),
         url(r'^(?P<slug>[\w-]+)/edit/$', post_update, name='update'),
         url(r'^(?P<id>\d+)/delete/$', post_delete, name='delete'),
         # url(r'^search/', include('haystack.urls')),
       ]
      

      【讨论】:

        猜你喜欢
        • 2023-04-06
        • 2013-08-30
        • 1970-01-01
        • 2012-07-08
        • 1970-01-01
        • 2011-05-17
        • 1970-01-01
        • 2018-12-31
        • 1970-01-01
        相关资源
        最近更新 更多