2016-11-09 51 views
0

我得到這個錯誤NoReverseMatch在/ blog/create /,任何人都可以幫我嗎?謝謝。NoReverseMatch at/blog/create/

views.py

@login_required(login_url='account_login') 
def create_post(request): 
    if request.method == 'POST': 
     post_form = CreatePostForm(request.POST) 
     if post_form.is_valid(): 
      new_post = post_form.save(commit=False) 
      new_post.author = request.user 
      new_post.slug = slugify(new_post.title) 
      new_post.save() 
      messages.success(request, 'Post creates successfully') 
      # redirect to new created item detail view 
      return redirect(new_post.get_absolute_url()) 
    else: 
     post_form = CreatePostForm() 
    return render(request, 
        'blog/post/detail.html', 
        {'post_form': post_form}) 

def post_detail(request, id, slug): 
    post = get_object_or_404(Post, id=id, slug=slug) 
    return render(request, 'blog/post/detail.html', {'section': 'blogs', 
                 'post': post}) 

models.py

class Post(models.Model): 
    STATUS_CHOICES = (
     ('draft', 'Draft'), 
     ('published', 'Published'),  
    ) 
    title = models.CharField(max_length=250) 
    slug = models.SlugField(max_length=250, 
          unique_for_date='publish') 
    author = models.ForeignKey(settings.AUTH_USER_MODEL, 
           related_name='blog_posts') 
    body = models.TextField() 
    publish = models.DateTimeField(default=timezone.now) 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    status = models.CharField(max_length=10, 
           choices=STATUS_CHOICES, 
           default='draft') 
    objects = models.Manager() # The default manager 
    published = PublishedManager() # Our custom manager 
    tags = TaggableManager() 

    class Meta: 
     ordering = ('-publish',) 

    def __str__(self): 
     return self.title 

    def get_absolute_url(self): 
     return reverse('blogs:post_detail', 
         args=[self.id, self.slug]) 

urls.py該應用:

urlpatterns = [ 
    # post views 
    url(r'^$', views.post_list, name='post_list'), 
    url(r'^create/$', views.create_post, name='post_detail'), 
    url(r'^detail/(?P<id>\d+)/(?P<slug>[-\w]+)/$', views.post_detail, name='detail'), 
] 

主urls.py

urlpatterns = [ 

    url(r'^admin/', include(admin.site.urls)), 
    url(r'^blog/', include('blog.urls', 
          namespace='blogs', 
          app_name='blog')), 
] 

當我嘗試創建一個新的帖子,我得到該錯誤。我想顯示創建的帖子。這是我創建新帖子的表單。

<form class="form-horizontal" method="post" action="."> 
        {% csrf_token %} 
        {{ post_form.media }} 
        <fieldset> 
         <div class="form-inline"> 
          <div class="form-group" style="margin-bottom: 20px;"> 
           {% render_field post_form.title class="form-control" placeholder="Blog title" %} 
           {% render_field post_form.status class="form-control" %} 
          </div> 
         </div> 
         <div class="input-group" style="margin-bottom: 20px; height: 800px; width: 800px;"> 
          {{ post_form.body }} 
         </div> 
         <div class="control-group"> 
          <!-- Button --> 
          <div class="controls" style="margin-bottom: 20px"> 
           <button class="btn btn-lg btn-success" style="min-width: 300px">Save</button> 
          </div> 
         </div> 
         {% if redirect_field_value %} 
         <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" /> 
         {% endif %} 
        </fieldset> 
       </form> 

我想如果你能解釋我什麼是錯的。謝謝。

回答

1

首先,當您發佈有關錯誤的信息時,請提供完整的錯誤消息。

在這種情況下,錯誤是由您的模型的get_absolute_url方法引起的。它試圖顛倒一個名爲「post_detail」的URL,傳遞id和slug參數。但是從urls.py中可以看到,沒有這樣的URL:有一個名爲「detail」的參數,或者一個名爲「post_detail」的參數,它沒有任何參數,並且奇怪地指向了您的創建視圖。

+0

經過兩年的開啓和關閉Django的使用,結果是這個評論最終使我的生態系統點擊了。乾杯。 – sparkholiday