代码之家  ›  专栏  ›  技术社区  ›  Cflux Matt

NoReverseMatch-找不到关键字参数为“pk”的“”的反向

  •  0
  • Cflux Matt  · 技术社区  · 7 年前

    我很确定这是一个简单的错误,但我似乎无法解决它。错误表明找不到关键字参数,但我在html中找到了它们。

    错误如下:

    NoReverseMatch at /questions/questionupdate/user2-question3/4/
    Reverse for 'detail' with keyword arguments '{'pk': 4}' not found. 1 pattern(s) tried: ['questions/questiondetail/(?P<slug>[\\w-]+)/(?P<pk>\\d+)/$']
    Request Method: GET
    Request URL:    http://127.0.0.1:8000/questions/questionupdate/user2-question3/4/
    Django Version: 1.11
    Exception Type: NoReverseMatch
    Exception Value:    
    Reverse for 'detail' with keyword arguments '{'pk': 4}' not found. 1 pattern(s) tried: ['questions/questiondetail/(?P<slug>[\\w-]+)/(?P<pk>\\d+)/$']
    
    file structure:
    project: UserTest
    --->app:accounts
    --->app:questions
    

    型号。py公司

    class Question(models.Model):
        class Meta:
            ordering = ['-date_updated']
        user = models.ForeignKey(User, related_name="question")
        # completedTODO: get user working^
        question = models.TextField(blank=False, null=False) # unique=True,
        question_html = models.TextField(blank=False, null=False)
        answer = models.TextField(blank=False, null=False)
        answer_html = models.TextField(blank=False, null=False)
        slug = models.SlugField(unique=True, default='')
        tags = TaggableManager()
    
        def __str__(self):
            return self.question
    
        def save(self, *args, **kwargs):
            self.question_html = misaka.html(self.question)
            self.answer_html = misaka.html(self.answer)
            super().save(*args, **kwargs)
    
        def get_absolute_url(self):
            return reverse(
                "questions:detail",
                kwargs={
                    # "slug": self.slug,
                    "pk": self.pk
                }
            )
    

    URL。py公司 我正在尝试将slug和pk传递到url

    url(r'questiondetail/(?P<slug>[\w-]+)/(?P<pk>\d+)/$', views.QuestionDetail.as_view(), name='detail'),
    url(r'questionupdate/(?P<slug>[\w-]+)/(?P<pk>\d+)/$', views.QuestionUpdate.as_view(), name='update'),
    

    视图。py公司

    class QuestionDetail(generic.DetailView):
        model = models.Question
    
    class QuestionUpdate(generic.UpdateView):
        model = models.Question
        form_class = QuestionForm
        template_name = "questions/question_form_update.html"
    

    问题\u详细信息。html

    <h3><a href="#">{{ question.user }}</a></h3>
    <h3>{{ question.question_html|safe }}</h3>
    <h3>{{ question.answer_html|safe }}</h3>
    <a href="{% url 'questions:update' slug=question.slug pk=question.pk %}">Update Question</a>
    

    感谢您的帮助!

    1 回复  |  直到 7 年前
        1
  •  3
  •   hidalgo    7 年前

    问题似乎是由注释行引起的;)

    def get_absolute_url(self):
            return reverse(
                "questions:detail",
                kwargs={
                    # "slug": self.slug,
                    "pk": self.pk
                }
            )
    

    取消对它的注释,它应该可以工作。