设计师的django前端定制(不修改视图或表单)
django front end customization by designer (without modifying view or form)
我真的希望我的前端同事能够处理 CSS 和其他前端的事情 -- 事实上,django 的设计原则就是这种分离,他们可以大部分修改模板而不需要我来做更改代码。然而,我经常发现修改表单的唯一方法似乎是在后端(在视图、模型或表单中)。对于包提供的视图(例如,注册),它更麻烦,因为通常这是对提供的 python 代码的唯一修改。
示例:在 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>
我非常喜欢占位符文本(例如,密码字段中的浅灰色单词 "password")。所以我发现自己做了一个 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 和表单变量的 contents 的东西。像这样(这是不对的):
{{ 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 我错过了什么,这样的前端任务不需要后端干预?
咨询了几个同事,感觉最有可能的是这个
{{ 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" />
让 django 完成工作并因此对包中的未来更改保持健壮与需要包用户进行大量修改之间是一个合理的平衡。这就是我们现在正在做的。
或许可以编写一个模板过滤器。这超出了我本周活动的范围,但如果有人能写出这样的东西肯定会很漂亮:
{{ form.password.errors }}
{{ form.password | attrs placeholder="password" }}
我真的希望我的前端同事能够处理 CSS 和其他前端的事情 -- 事实上,django 的设计原则就是这种分离,他们可以大部分修改模板而不需要我来做更改代码。然而,我经常发现修改表单的唯一方法似乎是在后端(在视图、模型或表单中)。对于包提供的视图(例如,注册),它更麻烦,因为通常这是对提供的 python 代码的唯一修改。
示例:在 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>
我非常喜欢占位符文本(例如,密码字段中的浅灰色单词 "password")。所以我发现自己做了一个 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 和表单变量的 contents 的东西。像这样(这是不对的):
{{ 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 我错过了什么,这样的前端任务不需要后端干预?
咨询了几个同事,感觉最有可能的是这个
{{ 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" />
让 django 完成工作并因此对包中的未来更改保持健壮与需要包用户进行大量修改之间是一个合理的平衡。这就是我们现在正在做的。
或许可以编写一个模板过滤器。这超出了我本周活动的范围,但如果有人能写出这样的东西肯定会很漂亮:
{{ form.password.errors }}
{{ form.password | attrs placeholder="password" }}