我只是Django的初学者。
首先,使用Django Form似乎很方便。我可以得到我已经在Model with ModelForm类中定义的所有内容。我可以把{form}放在模板中。已经有预定义的Field类型,我可以方便地使用它。
但是如果你需要和一个不懂Django或Python并且负责制作前端部分的人一起工作,这很棘手。
例如,我制作这样的模板。
example.html的
<form action="." method="post"> {% csrf_token %}
{{ form }}
<input type="submit" value="ok">
views.py
class TestView(FormView):
template_name = 'example.html'
form_class = TestForm
success_url = '/success/'
def form_valid(self, form):
print('data is validated! you can do work with cleaned data!')
return super(TestView, self).form_valid(form)
Q1:前台开发人员无法使用{{form}}。右吗
所以我可以更改example.html,因为如果你正确设置了name属性和type属性,它可以正常工作。
example.html的
<form action="." method="post"> {% csrf_token %}
<input type="text" name="name">
<input type="text" name="calorie">
<input type="submit" value="Ok">
</form>
models.py
class Cereal(models.Model):
name = models.CharField(max_length=50)
calorie = models.CharField(max_length=50)
Q2:我认为如果我更改上面的example.html,前端开发人员可以使用它吗?右吗
好吧,如果我的问题都很好,那么使用ModelForm并编写html代码而不是{{form}} django模板语法似乎很好。但是如果你使用ModelChoiceField,它看起来很讨厌。您设置queryset参数,它在模板上显示select小部件。例如queryset reqsult是{A,B,C}。它将转向下面的
<select id="id_something" name="name of something">
<option>A</option>
<option>B</option>
<option>C</option>
</select>
正如我之前告诉你的那样,我不想尽可能多地使用像{{form}}这样的Django模板语法。所以我打算写下面的内容。
views.py
render(request, "example.html", {queryset : something.objects.all()})
example.html的
<select id="id_something" name="name of something">
{% for element in queryset %}
<option>{{ element }}</option>
{% endfor %}
</select>
问题3:这种做法似乎没问题吗?使用Django Form时,使用较少的Django模板语法是不是更好的方法?
好吧,我总结说使用DRF(Django RestFramework)是独立分离前端和后端开发人员任务的最佳方法。但在我目前的情况下,模板(html,css,js)已经制作完成。我需要将其更改为与Django框架一起使用。前端开发人员将使用已经制作的模板稍微改变一下。
当我在Youtube上观看一些pycon视频时,有些人说Djang框架有点过分耦合。
我希望我能更有效地使用Django Model表格和前端开发人员。
感谢阅读。对于专家来说,我的问题可能是荒谬的。如果不清楚,请再问我一次。