Django TrunceWords筛选器标记,带有省略号的href链接

2024-10-03 23:23:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用Django模板标记过滤器(例如(| truncewords_html:my_number))截断我的帖子内容。但带有省略号的href链接,可以将用户重定向到详细的文章完整内容。你知道吗

除了定义一个定制的模板标签过滤器(在类似但相当老的线程中引用)之外,我还想知道是否有一个内置的方法来实现所需的结果。你知道吗


Tags: django用户标记模板过滤器number内容链接
1条回答
网友
1楼 · 发布于 2024-10-03 23:23:33

我解决了这个问题。我没有在Django的模板标记过滤器中构建逻辑,而是发送jsonapi数据(使用Django Rest框架构建)供前端使用(在这里我使用JQuery库)。代码如下:

你知道吗序列化程序.py地址:

class PostListSerializer(ModelSerializer):
   url = post_detail_url
   username = serializers.SerializerMethodField()
   date_created = serializers.SerializerMethodField()

   def get_username(self, obj):
      return obj.user.username

   def get_date_created(self, obj):
      return obj.created.strftime('%b %d %Y | at %I:%M %p')

   class Meta:
      model = Post
      fields = [
          'id',
          'username',
          'title',
          'slug',
          'content',
          'url',
          'date_created',
          ]

你知道吗视图.py地址:

class PostListAPIView(generics.ListAPIView):
    queryset = Post.objects.all()
    serializer_class = serializers.PostListSerializer

最后是我的帖子_列表.html地址:

<script type="text/javascript">
  $(document).ready(function(){
    $.ajax({
      url: '/api/posts/',
      method: 'GET',
      success: function(data){
        // iterate through the array of objects
        $.each(data, function(key, value){
          var postUser= value.username;
          var postTitle = value.title;
          var postSlug = value.slug;
          var postCreated = value.date_created;
          var postContent = value.content;
          var postShort;

          if (postContent.length >= 50){
            // truncate long posts
            postShort = jQuery.trim(postContent).substring(0, 50).split(" ").slice(0, -1).join(" ")
        + "<a href='/posts/" + postSlug + "'>" + "..." + "</a>";
          } else {
            postShort = postContent;
          }

          $('#posts-container').append(
            "<div>" + "<h4>" + postUser + ": " + "<a href='/posts/"
        + postSlug + "'>" + postTitle + "</a>" + "<h5>"
        + postCreated + "</h5>" + postShort + "</div>" + "<hr>"
          );
        });
      },
      error: function(data){
        console.log('error');
        console.log(data);
      }
    });
  });
</script>

相关问题 更多 >