代码之家  ›  专栏  ›  技术社区  ›  Samir Tendulkar

TemplateView在django get_absolute_url中不工作

  •  0
  • Samir Tendulkar  · 技术社区  · 7 年前

    我有一个 report 管理我的项目中不适当内容的所有标记的应用程序。成员 reporter 可以报告其他成员 reported 发布不适当的内容。一切正常,报表对象被创建,但是它最终不会重定向到感谢页面。但返回到相同的表单页。奇怪的是当我粘贴 http://127.0.0.1:8000/report/thanks/ 在地址栏中,我意外地看到了表单页面。通常报告页面会有url http://127.0.0.1:8000/report/Amanda/ 这里到底出了什么问题。

    下面是我的 模型.py

    class Report(models.Model):
        reporter = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='reporting_members')
        reported = models.ForeignKey(User, on_delete=models.CASCADE, null=True, related_name='reported_members')
        report_url = models.URLField(max_length=2000, blank=True, null=True)
        reported_at = models.DateTimeField(auto_now_add=True)
        reporting_choices = (
            ('1', 'The images posted by this user are not relevant to the Post),
            ('2', 'Rude or abusive content, The words chosen by the user are inappropriate'),
            ('3', 'This user is asking me to change my review in return for favor '),
            ('4', 'Other'),
        )
        reason_to_report = models.CharField(max_length=1, choices=reporting_choices)
        reason = models.TextField(blank=True, null=True)
    
        def __str__(self):
            return '{} is reporting {} for {}'.format(self.reporter, self.reported, self.reason_to_report)
    
        def get_absolute_url(self):
            return reverse('report:thanks')
    

    下面是我的 视图.py

    class ReportCreateView(LoginRequiredMixin, CreateView):
        model = Report
        fields = ('reason_to_report', 'reason')
    
        def form_valid(self, form):
            form.instance.reporter = self.request.user
            form.instance.reported = User.objects.get(username=self.kwargs.get('username'))
            next = self.request.POST.get('next')
            form.instance.report_url = next
            super().form_valid(form)
            return redirect('report:thanks')
    
    
    
    
    class ThanksView(LoginRequiredMixin, TemplateView):
        template_name = 'report/thanks.html'
    

    下面是我的 网址.py

    urlpatterns = [
        url(r'^(?P<username>[-\w]+)/$', views.ReportCreateView.as_view(), name='report_user'),
        url(r'^thanks/$', views.ThanksView.as_view(), name='thanks'),
    
    ]
    

    下面是 模板 我的报告表

    <form action="" method="post" >
        {% csrf_token %}
        {% bootstrap_form form %}
          <input type="hidden" name="next" value="{{ request.META.HTTP_REFERER }}">    
          <input class="btn btn-primary" type="submit" />
          <a href="{% url 'home' %}">
             <button class="btn btn-default">Cancel</button>
          </a>
     </form>
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Daniel Roseman    7 年前

    "thanks" 是用户名regex的匹配字符串。Django总是采用第一个匹配的模式,因此将路由到reportcreate视图。

    交换URL模式的顺序。