2011-06-28 10 views
6

Ogólny widok zaoszczędził wiele kodu, ale nadal muszę pisać szablony każdego modelu. Mam ten sam kod we wszystkich szablonach, np.Czy istnieje coś takiego jak Ogólne szablony w django jak Ogólne widoki

<form action="/{{type}}/{{ action }}/" method="post" enctype="multipart/form-data" > 
    {% csrf_token %} 
    {% for field in form %} 
     <div class="fieldWrapper"> 
      {{ field.errors }} 
      {{ field.label_tag }}: {{ field }} 
     </div> 
    {% endfor %} 
    <p><input type="submit" value="Submit" /></p> 
    </form> 

tj. Zasadniczo chcę mieć wszystkie pola z modelu, aby dodać lub edytować.

jest jakieś obejście mieć szablon rodzajowe automatrically

+1

Dlaczego potrzebujesz różnych szablonów? Dlaczego nie skorzystać z tego samego szablonu dla wszystkich modeli? W kodzie, który pokazałeś, nie ma nic specyficznego dla modelu. –

+1

Ale ogólne widoki oczekują szablonu takiego jak app/model_form.html. w przeciwnym razie muszę jawnie napisać tam nazwę szablonu. więc zamiast myśleć o pisaniu nazwy szablonu, automatycznie otrzymuje ona numer – user2134226

+0

Jaki jest problem z jawnym zapisaniem nazwy szablonu – Arion

Odpowiedz

0

w Django, szablony mogą mieć charakter ogólny sama !!

Można użyć formularza zmierzających do każdego modelu wewnątrz samego szablonu za pomocą {{form.attribute}}

Here jest doc django oficial

+0

, ale co powinienem napisać w atrybucie "akcja" "szablonu" – user2134226

+0

To zależy od tego, co chcesz, aby twój formularz zrobić... – juankysmith

1

Jeśli masz kod szablonu, który jest identyczne, można użyć include tag:

{% include "foo/bar.html" %} 

a wliczone kod może być modyfikowany zmiennych:

{% include "name_snippet.html" with person="Jane" %} 

Nawet jeśli kod jest inny dla każdego szablonu (myślę, że przykład jest mówić o formach o różnych polach, nie jestem pewien), można nadal korzystać zawiera - wystarczy wykonać dwa bloki:

{% include "startform.html with some_action="post" %} 
    {{ field.errors }} 
    {{ field.label_tag }}: {{ field }} 
    {{ field.field2_tag }}: {{ field2 }} 
{% include "endform.html %} 

Istnieje również template inheritance, w którym można zdefiniować podstawowy szablon i wszystkie inne szablony będą z niego dziedziczyć. Dziedziczenie jest oparte na blokach, możesz zastąpić bloki w szablonie nadrzędnym nowym kodem w szablonie podrzędnym. Pracuje bardzo dobrze.

0

Spójrz na ModelForm helper app. Tworzy formularz z dowolnego modelu, który następnie może być użyty w prostym szablonie formularza.

Powiązane problemy