0

を持つモデルで Django アプリケーションを作成しましたTextField。管理インターフェイスを使用すると、TextField以下のように入力できます。

TextField を使用した管理インターフェース

ただし、テンプレートを使用して JSON でレンダリングすると、ブラウザーで次のようになります。つまり、次のように改行を正しく処理できません。

JSON がレンダリングされた Web ブラウザー

これを正しく処理する方法がわからないため、テキスト フィールドのテキストを管理インターフェイス内で必要に応じて入力し、JSON として正しくレンダリングできます。

ここに私のmodel.pyからのスニペットがあります:

@python_2_unicode_compatible
class Venue(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=50, blank=False, null=False)
    description = models.TextField(blank=False, null=False)
    def __str__(self):
        return self.name

これがviews.pyの関数です

def venues(request):
    venues_list = Venue.objects.order_by('-name')
    context = {'venues_list':venues_list}
    return render(request, 'myapp/venues.json', context, content_type='application/json')

これが私の会場.jsonテンプレートです:

[
    {% for venue in venues_list %}
        {
            "venue_id":"{{venue.id}}",
            "name":"{{venue.name}}",
            "description":"{{venue.description}}"
        }
        {% if forloop.last %}{% else %}, {% endif %}
    {% endfor %}
]

助けていただけませんか?

PSテンプレートが良いアプローチであるかどうかはわかりません。しかし、JSON がモデル全体をダンプするだけでなく、JSON データに表示されるフィールドを制御したいと考えています。

4

1 に答える 1

0

私はなんとかそれを行うことができました...したがって、さらに読んだ後、テンプレートを使用することは JSON データをレンダリングするための最良の方法ではないと判断しました。JsonResponseJSONデータの表示を正しく処理するために使用できることがわかりました。

ここでは、テンプレートを削除し、views.py の関数を次のように書き直しました。

django.http import JsonResponse から ...

def venues(request):
    venues_list = Venue.objects.order_by('-name')
    venue_array =[]

    for venue in venues_list:
        record = {"venue_id":venue.id, "name":venue.name, "description":venue.description}
            venue_array.append(record)

    return JsonResponse(venue_array, safe=False)

JSON が適切な改行で正しく表示されるため、すべてが正常に機能するようになりました。

于 2016-05-27T12:48:23.133 に答える