Django新闻列表页无法跳转至单篇文章详情页问题求助
问题原因及修复方案
1. 核心错误:模板链接变量引用错误
列表页模板遍历新闻列表时,循环内的单条新闻变量名为news,但你在a标签中引用了不存在的post变量,导致链接href属性为空/无效,点击后无跳转效果。
2. 其他需修正的问题
- a标签不需要
methods="post"属性,超链接默认发起GET请求,该属性不符合HTML规范 models.py中__str__、get_absolute_url方法缩进错误,目前被包含在Meta内部类中,需调整为News类的同级方法
修正后的代码
模板文件修正
<div class="col-lg-4 col-md-6 grid-item"> {% for news in news %} <div class="blog-item large-item set-bg">{{ news.image }} <!-- 把post改成news,删除无效的methods属性 --> <a href="{{news.get_absolute_url}}"> <div class="categories">{{ news.title }}</div> <h5>{{ news.text| linebreaks|truncatechars:200 }}</h5> </a> <div> {{ news.publish }} {{ news.tag }} </div> </div> {%endfor%} </div>
Models.py缩进修正
class News(models.Model): title = models.CharField(max_length=1000, verbose_name='Название') slug = models.SlugField(max_length=200, db_index=True) image = models.ImageField(upload_to='articles/', verbose_name='Фото') publish = models.DateTimeField(default=timezone.now, verbose_name='Дата публикации') author = models.ForeignKey(User, related_name='news', on_delete=models.CASCADE, verbose_name='Автор', null=True) text = models.TextField(verbose_name='Текст') tags = models.ManyToManyField(Tag, related_name='news', verbose_name='Тэг') created = models.DateTimeField(auto_now_add=True, verbose_name='Дата создания') updated = models.DateTimeField(auto_now=True, verbose_name='Дата обнавления') status = models.CharField(max_length=30, choices=STATUS_CHOICES, default='опубликован', verbose_name='Статус') class Meta: ordering = ('title',) verbose_name = 'Новости' verbose_name_plural = 'Новости' # 调整缩进,和Meta类同级,成为News类的成员方法 def __str__(self): return self.title def get_absolute_url(self): return reverse('post', kwargs={'post_slug': self.slug})
修改完成后刷新页面即可正常跳转。
内容的提问来源于stack exchange,提问作者lisa
相关产品推荐
相关产品推荐

