Có thể, nhưng có thể hơi khó hiểu, phức tạp hoặc phức tạp.
Những gì tôi đề nghị, là kiến trúc sư nó để bạn có phần hiển thị trong hàm utils.py và sử dụng nó trong một simple_tag thay vì bao gồm_tag. Bằng cách này, bạn có thể sử dụng cùng một hàm render utils dễ dàng trong các khung nhìn.
Trong ví dụ tưởng tượng (rất đơn giản) của tôi, tôi có danh sách người dùng và nút "Tải thêm" trả về nhiều người dùng hơn.
tài khoản/utils.py
from django.template.loader import render_to_string
def render_users(users):
return render_to_string("account/user_list_items.html", {"users": users})
tài khoản/templatetags/account_tags.py
from django import template
from ..utils import render_users
register = template.Library()
@register.simple_tag
def list_users(users):
return render_users(users)
tài khoản/views.py
from django.http import HttpResponse
from .models import User
from .utils import render_users
def load_more_users(request):
limit = request.GET["limit"]
offset = request.GET["offset"]
users = User.objects.all()[offset:offset + limit]
return HttpResponse(render_users(users))
Đơn giản là tốt hơn so với phức tạp.
Tôi luôn gặp sự cố khi trả về xml/json và sau đó có javascript hiển thị dữ liệu thành html. Không phải là vi phạm các nguyên tắc DRY gây ra bây giờ chúng tôi có mã nhân đôi trong mẫu django và trong javascript. – killerbarney
Bạn đề cập đến nó có thể được thực hiện, nhưng bạn không bao gồm một ví dụ. Bạn có thể chỉ cho tôi cách để làm điều đó hoặc một trang có nó? – killerbarney