使用Django Form尽可能减少Django模板语法的最佳方法是什么?

时间:2016-10-21 03:03:09

标签: python django forms django-templates frontend

我只是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表格和前端开发人员。

感谢阅读。对于专家来说,我的问题可能是荒谬的。如果不清楚,请再问我一次。

0 个答案:

没有答案