【问题标题】:Make non-published "petitions" inaccessible by url使 url 无法访问未发布的“请愿书”
【发布时间】:2016-10-17 20:17:48
【问题描述】:

我有一个带有名为“已发布”的 BooleanField 的请愿模型,默认情况下它设置为 false。

class Petition(models.Model):
  # Added on creation
  target = models.CharField(max_length=50, null=True)
  title = models.CharField(max_length=300)
  body = models.TextField()
  goal = models.IntegerField()

  # Added after form creation
  letter = models.TextField(null=True)
  published = models.BooleanField(default=False)
  featured_image = models.CharField(max_length=250, null=True)
  end_date = models.DateTimeField(null=True)

  # Not User Submitted
  is_victory = models.BooleanField(default=False)
  created_at = models.DateTimeField(auto_now=False, auto_now_add=True)
  updated_at = models.DateTimeField(auto_now=True, auto_now_add=False)

  def __unicode__(self):
      return self.title

  def get_absolute_url(self):
    return reverse("petitions:detail", kwargs={"id": self.id})

在请愿书索引页面上,我知道我只能按已发布的请愿书进行过滤,而未发布的请愿书将不会显示。但是现在,如果您手动输入 url 路径,仍然可以访问未发布的请愿书。如何让它为尚未发布的请愿书显示“请愿书不存在”消息。

【问题讨论】:

  • 也许您应该显示相关视图的代码?

标签: django django-models django-templates django-views


【解决方案1】:

在您的请愿详细信息视图中,添加一行检查请愿是否已发布,如果未发布则返回“请愿不存在”模板:

if petition.published != true:  # You can simplify to 'if not petition.published:'
    return render(request, 'petition_doesnt_exist.html')

否则继续你的视图逻辑的其余部分。

【讨论】:

    【解决方案2】:

    在视图中,未发布时引发404。

    from django.http import Http404
    
    def view(request, ...):
        if petition.published != true:
            raise Http404()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      相关资源
      最近更新 更多