【问题标题】:Show snapshot of articles in news list在新闻列表中显示文章的快照
【发布时间】:2019-04-01 14:09:26
【问题描述】:

我有这个news_list.html 模板,它完整地列出了所有文章。有什么方法可以将这些文章显示为整篇文章的快照。理想情况下,我想显示一个缩略图大小的图像、标题和前 50 个字符,并让用户单击文章以查看全部内容。可以这样做吗?如果可以,怎么做?

其他信息

这是我的模板(news_list.html):

{% extends 'base.html' %}

{% block title %}News{% endblock title %}

{% block content %}
  {% for news in object_list %}
    <div class="card">
      <div class="card-header">
        <span class="font-weight-bold">{{ news.title }}</span> &middot;
        <span class="text-muted">by {{ news.author }} | {{ news.date }}</span>
      </div>
      <div class="card-body">
        {% if news.thumb %}
          <p align="center"><img src="{{ news.thumb.url }}" /></p>
        {% endif %}
        <p>{{ news.body | linebreaks }}</p>
      </div>
      <div class="card-footer">
        {% if user.is_authenticated %}
          <a href="{% url 'news_edit' news.pk %}">Edit</a>
          <a href="{% url 'news_delete' news.pk %}">Delete</a>
        {% endif %}
      </div>
    </div>
    <br />
  {% endfor %}
{% endblock content %}

models.py

class News(models.Model):
    title = models.CharField(max_length=255)
    body = models.TextField()
    date = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(
        get_user_model(),
        on_delete=models.CASCADE,
    )
    thumb = models.ImageField(blank=True)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('news_detail', args=[str(self.id)])

views.py

class NewsListView(ListView):
    model = News
    template_name = 'news_list.html'

class NewsDetailView(DetailView):
    model = News
    template_name = 'news_detail.html'
    login_url = 'login'


class NewsUpdateView(LoginRequiredMixin, UpdateView):
    model = News
    fields = ('title', 'body', 'thumb')
    template_name = 'news_edit.html'
    login_url = 'login'

    def test_func(self):
        obj = self.get_object()
        return obj.author == self.request.user


class NewsDeleteView(LoginRequiredMixin, DeleteView):
    model = News
    template_name = 'news_delete.html'
    success_url = reverse_lazy('news_list')
    login_url = 'login'

    def test_func(self):
        obj = self.get_object()
        return obj.author == self.request.user


class NewsCreateView(LoginRequiredMixin, CreateView):
    model = News
    template_name = 'news_new.html'
    fields = ('title', 'body', 'thumb')
    login_url = 'login'

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

【问题讨论】:

  • 请显示一些代码,例如您的模板、模型和视图。
  • 对不起@Stargazer。提交问题太快了。我在问题中添加了一些相关代码。

标签: python html django


【解决方案1】:

我在模板的正文元素中添加了truncatewords

{% block content %}
  {% for news in object_list %}
    <div class="card" style="width:300px">
       <div class="card-header">
        <span class="font-weight-bold">
          <a href="{% url 'news_detail' news.pk %}" style="color:black">{{ news.title }}</a>
        </span> &middot;
        <span class="text-muted">by {{ news.author }} | {{ news.date }}</span>
      </div>
      <div class="card-body">
        {% if news.thumb %}
          <p align="center"><img src="{{ news.thumb.url }}" /></p>
        {% endif %}
        <p>{{ news.body | linebreaks | truncatewords:30 }}
          <a href="{% url 'news_detail' news.pk %}">Full story</a></p>
      </div>
      <div class="card-footer">
        {% if user.is_authenticated %}
          <a href="{% url 'news_edit' news.pk %}">Edit</a>
          <a href="{% url 'news_delete' news.pk %}">Delete</a>
        {% endif %}
      </div>
    </div>
    <br />
  {% endfor %}
{% endblock content %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 2014-10-03
    • 2018-09-13
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多