1

forループでいくつかの値を吐き出しているので、X文字のみが表示されるようにしたいと思います。私はDjangoに比較的慣れていません。

例えば:

  <div class="bookauthor">
    by 
    {% for author in book.volumeInfo.authors %}
      {% if not forloop.first %}&amp;{% endif %}
      {{author}}
    {% endfor %} 
  </div>

本の著者のリストを作成します。例:

Lennart Berggren&Jonathan M. Borwein&Peter B. Borwein

著者のリストが長くなることがあるので、30文字だけが欲しいです。

truncatechars( Django 1.4の新機能)を使用して、のような単一の値でこれを行うことができることは理解して{{author|truncatechars:9}}いますが、forループ、またはforループからの結果のテキストに適用するエレガントな方法があるかどうか疑問に思っています。不明な点がある場合はお知らせください。

編集

{%filter%}で使用すると、truncatecharsが正しく機能しないようです。それが生成するのは「...」だけです。もう少しテストします。バグの可能性があります。truncatewordsはうまく機能し、とにかく私はこの状況により適しているかもしれません。

      <div class="bookauthor">
        by 
        {% filter truncatechars:30 %}
          {% for author in book.volumeInfo.authors %}
          {% if not forloop.first %}&amp;{% endif %}
            {{author}}
          {% endfor %}  
        {% endfilter %}  
     </div>
4

2 に答える 2

2

{% filter %}

于 2012-04-24T01:16:03.650 に答える
0

カスタムフィルターを使用する(ここでドキュメント)

@register.filter
def queryset_as_list(queryset, attr=None):
    query_list = []
    for param in queryset:
        query_list.append(getattr(param, attr) if attr else str(param))

    return query_list


@register.filter
def str_list(list):
    return ', '.join(list)

フィルタを使用してクエリセットをリストに変換し、別のフィルタを使用してリストを文字列に変換し、最後にdjangoのtruncatecharsフィルタを使用して、このようなテンプレートに50文字のみを表示します

{{ book.volumeInfo.authors|queryset_as_list|str_list|truncatechars:50 }}
于 2021-12-27T02:38:26.153 に答える