Gán các biến cho mẫu con trong thẻ {% include%} Django


89

Tôi có mã này (không cho tôi kết quả mong đợi)

#subject_content.html
{% block main-menu %}
    {% include "subject_base.html" %}
{% endblock %}


#subject_base.html
....
....
    <div id="homework" class="tab-section">
        <h2>Homework</h2>
            {% include "subject_file_upload.html" %}
    </div>

mẫu con:

#subject_file_upload.html
    <form action="." method="post" enctype="multipart/form-data">{% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="submit">
    </form>

và quan điểm của tôi

#views.py
@login_required
def subject(request,username, subject):
    if request.method == "POST":
        form = CarsForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect("/")
    form = CarsForm()
    return render_to_response('subject_content.html', {'form':form}, context_instance=RequestContext(request))

Đoạn mã trên tạo HTML theo cách tôi muốn, tuy nhiên biểu mẫu không cập nhật cơ sở dữ liệu.

NHƯNG,

Nếu tôi bỏ qua mẫu giữa và chuyển thẳng đến biểu mẫu tải lên, nó hoạt động tốt:

#subject_content.html
{% block main-menu %}
    {% include "subject_file_upload.html" %}
{% endblock %}

Làm ơn giúp tôi làm cho nó hoạt động với mẫu giữa. Tôi muốn làm điều này, bởi vì tôi không thể nhập cùng một mã nhiều lần.


13
Bạn đã thử sử dụng includevới with?
Besnik

Câu trả lời:


215

Giống như @Besnik đã đề xuất, nó khá đơn giản:

{% include "subject_file_upload.html" with form=form foo=bar %}

Các tài liệu choinclude đề cập này. Nó cũng đề cập rằng bạn có thể sử dụng onlyđể hiển thị mẫu chỉ với các biến đã cho, mà không kế thừa bất kỳ biến nào khác.

Xin cảm ơn @Besnik


4
Để hoàn thiện, hãy lưu ý rằng nếu bạn chỉ muốn hiển thị mẫu với các biến đã cho (và không kế thừa ngữ cảnh gốc), bạn có thể thêm tùy chọn "duy nhất": {% include "path / to / template.html" với form = form only}}
gonz

8
Để hoàn thiện lại, đây là liên kết tới "with": docs.djangoproject.com/en/1.8/ref/templates/builtins/#include
Timo

@Vor Nếu chế độ xem của tôi trả về context["these_items"]context["other_items"], tôi có thể sử dụng bao gồm cái này để thay thế {% for item in these_items %}bằng {% for item in other_items %}không?
GiannisIordanou

vì lý do nào đó, nếu biến có dấu _ trong tên của nó, nó không hoạt động. Ví dụ: {% include "subject_file_upload.html" với my_form = form foo = bar%}. Bất kỳ lời giải thích cho điều này?
Alan Tygel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.