【问题标题】:How to go to a page with single post from the news list如何从新闻列表中转到包含单个帖子的页面
【发布时间】:2021-11-26 07:36:16
【问题描述】:

你能帮我完成我的项目吗? 我正在尝试从包含所有新闻的页面转到单个帖子,但无论我留在包含所有新闻的页面中。 但是如果我在地址栏中写上地址o,一切正常。

模型.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 = 'Новости'

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post', kwargs={'post_slug': self.slug})

Views.py

def list_news(request):
    news = News.objects.all()
    return render(request,
                  'diplom/news/post.html',
                   {'news': news})


def single_news(request, post_slug):
    post = get_object_or_404(News, slug=post_slug)
    return render(request,
                  'diplom/news/blog-single.html',
                  {'post': post})

urls.py

urlpatterns = [
   path('news/', views.list_news, name='News'),
   path('post/<slug:post_slug>/', views.single_news, name='post')
]

模板

<div class="col-lg-4 col-md-6 grid-item">
{% for news in news %}
   <div class="blog-item large-item set-bg">{{ news.image }}
       <a href="{{post.get_absolute_url}}" methods="post" >
             <div class="categories">{{ news.title }}</div>
                <h5>{{ news.text| linebreaks|truncatechars:200 }}</h5>
       </a>
            <div>
                {{ news.publish }}
                {{ news.tag }}
            </div>
    </div>
 {%endfor%}
</div>

【问题讨论】:

    标签: python html django


    【解决方案1】:

    我将 {% url 'url-name' param1 %} 用于我的模板。当您在模板中使用它时,这是否有效? URL Reversing

    <div class="col-lg-4 col-md-6 grid-item">
    {% for post in news %}
       <div class="blog-item large-item set-bg">{{ post.image }}
           <a href="{% url 'post' post.slug %}">
                 <div class="categories">{{ post.title }}</div>
                    <h5>{{ post.text|linebreaks|truncatechars:200 }}</h5>
           </a>
                <div>
                    {{ post.publish }}
                    {{ post.tag }}
                </div>
        </div>
     {%endfor%}
    </div>
    

    另请参阅您的单个对象的名称与您的对象列表相同。

    {% for news in news %}
    

    您可以重命名为 post,然后更改其余变量(不是链接),它应该可以工作。

    <div class="col-lg-4 col-md-6 grid-item">
    {% for post in news %}
       <div class="blog-item large-item set-bg">{{ post.image }}
           <a href="{{ post.get_absolute_url }}">
                 <div class="categories">{{ post.title }}</div>
                    <h5>{{ post.text|linebreaks|truncatechars:200 }}</h5>
           </a>
                <div>
                    {{ post.publish }}
                    {{ post.tag }}
                </div>
        </div>
     {%endfor%}
    </div>
    </div>
    

    我也更新了

    <a href="{% url 'post' news.slug %}" methods="post" >
    

    到

    <a href="{% url 'post' news.slug %}">
    

    因为您只是检索对象而不是发送信息来更新它。

    【讨论】:

    • 感谢您的回答。我试过你的选择,很遗憾没有奏效。
    • Django 调试页面显示什么?
    • Django debag 没有显示任何内容。当您单击帖子时,新闻页面会再次加载。如果您在地址栏中输入帖子的地址,那么一切正常
    • 如果您在浏览器中使用 DevTools 检查您单击的链接,该链接会显示什么?我怀疑它会将您重定向到相同的列表页面。确认 URL 与您期望的一致。如果不是,则需要更新您的模板以使用正确的 url。 &lt;a href="{% url 'post' post.slug %}"&gt; 应该可以工作。
    【解决方案2】:

    感谢您的回答。错误就在这一行。

    <a href="{{ post.get_absolute_url }}">
    

    这样做是必要的

    <a href="{{news.get_absolute_url }}">
    

    【讨论】:

      猜你喜欢
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      • 1970-01-01
      • 2021-01-29
      • 2020-05-04
      相关资源
      最近更新 更多