2015-05-25 5 views
0

Мне бы очень хотелось, чтобы мой коллега-фронт работал с CSS и другими элементами интерфейса - действительно, принцип дизайна django - это разделение, что они могут в основном изменять шаблоны и не нуждаться в изменении кода. И все же, слишком часто кажется, что единственный способ, которым я могу найти изменение формы, - на стороне бэкэнда (в представлении, модели или форме). Для представлений, предоставляемых пакетами (например, регистрация), это еще более надоедает, потому что часто это единственная модификация предоставленного кода python.Настройка внешнего интерфейса django дизайнером (без изменения вида или формы)

Пример: в registration/login.html (который представляет собой шаблон, так что я не много ума, обеспечивающих мои собственные) я это

<form method="post" action="."> 
    {% csrf_token %} 
    {{ form.errors }}<br> 
    {{ form.username.errors }} 
    <label for="{{ form.username.id_for_label }}"></label> {{ form.username }}<br> 
    {{ form.password.errors }} 
    <label for="{{ form.password.id_for_label }}"></label> {{ form.password }} 
    <br> 
    <input class="btn btn-success" type="submit" value="Me connecter" /> 
    <input type="hidden" name="next" value="{{ next }}" /> 
</form> 

Я бы очень хотел шаблонный текст (слово «пароль» в свете серый в поле пароля, например). И поэтому я считаю себя делать forms.py так что я могу написать

password1 = forms.CharField(
    label=_("Password"), 
    widget=forms.PasswordInput(attrs={'placeholder': 'password', ... 

И это не устает повторять каждый раз, когда передний конец ребята хотят изменить что-то в форме, которая просто не может быть правильным.

Чтобы было ясно, я хочу изменить шаблон так, что там, где мы имеем

{{ form.password.errors }} 
<label for="{{ form.password.id_for_label }}"></label> {{ form.password }} 

мы можем вместо этого написать что-то, что это просто HTML, CSS, и содержание переменной формы. Нечто подобное (что не является правильным):

{{ form.password.errors.text }} 
<label for="{{ form.password.id_for_label }}"></label> 
<input id="{{ form.password.id_for_label }}" 
    name="{{ form.password.name }}" 
    placeholder="password" 
    type="password" /> 

А может быть вариант на том, что это то, что нужно, но тогда я не понимаю, почему нет примеров, которые я видел, не делают этого.

Что мне не хватает в django, так что для таких задач frontend не требуется встроенное вмешательство?

+0

Вы пробовали встраивание входы в 'div' или' span', которые имеют класс ' 'или' id', так что фронтмен может играть с этим в css. Это может привести к меньшему изменению на задней стороне. – nnaelle

+0

@nnaelle - Я не следую за тобой, мой коллега по команде, конечно, может это сделать. Я уточнил вопрос (в конце), чтобы уточнить. – jma

ответ

0

Посоветовавшись с несколькими коллегами, кажется, скорее всего, что нужно сделать, это

{{ form.password.errors }} 
<label for="{{ form.password.id_for_label }}"></label> 
<input id="{{ form.password.id_for_label }}" 
    name="{{ form.password.name }}" 
    placeholder="password" 
    type="password" /> 

Это разумный баланс между позволяя Джанго сделать работу и так быть устойчивым к будущим изменениям в пакете против требующих большая модификация пользователей пакетов. Это то, что мы сейчас делаем.

Возможно создание шаблона фильтра. Это выходит за рамки деятельности на этой неделе для меня, но это, несомненно, будет отличный, если можно было бы написать что-то вроде этого:

{{ form.password.errors }} 
{{ form.password | attrs placeholder="password" }} 
Смежные вопросы