最佳的方法是如何尽可能少地使用Django模板语法和Django表单?

2024-05-01 22:10:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是刚学Django。你知道吗

起初,使用Django形式似乎很方便。我可以用ModelForm类得到我已经在Model中定义的所有内容。我可以把{form}放到模板中。已经有预定义的字段类型,我可以方便地使用它。你知道吗

但是如果你需要和一个不懂Django或者Python并且负责前端部分的人一起工作的话,这是很棘手的。你知道吗

例如,我这样做模板。你知道吗

你知道吗示例.html你知道吗

<form action="." method="post"> {% csrf_token %}
{{ form }}
<input type="submit" value="ok">

你知道吗视图.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}}。正确的?

所以我可以改变示例.html因为如果正确设置name属性和type属性,它就可以正常工作。你知道吗

你知道吗示例.html你知道吗

<form action="." method="post"> {% csrf_token %}
    <input type="text" name="name">
    <input type="text" name="calorie">
    <input type="submit" value="Ok">
</form>

你知道吗型号.py你知道吗

class Cereal(models.Model):
    name = models.CharField(max_length=50)
    calorie = models.CharField(max_length=50)

Q2:我认为如果我改变了,前端开发人员可以使用它示例.html在上面?正确的?

好吧,如果我的问题都很好的话,那么使用ModelForm并编写html代码而不是{form}django模板语法似乎很好。但是如果你使用modelcheicefield,它看起来很讨厌。您设置了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>

如前所述,我不想尽可能多地使用Django模板语法,比如{form}。所以我要写下面的内容。你知道吗

你知道吗视图.py你知道吗

render(request, "example.html", {queryset : something.objects.all()})

你知道吗示例.html你知道吗

<select id="id_something" name="name of something">
    {% for element in queryset %}
    <option>{{ element }}</option>
    {% endfor %}
</select>

Q3:这种方法看起来合适吗?在使用Django表单时,使用较少的Django模板语法不是更好的方法吗?

好吧,我的结论是,使用DRF(Django RestFramework)是独立地为前端和后端开发人员分离任务的最佳方法。但在我目前面临的情况下,模板(html、css、js)已经制作好了。我需要将其更改为与Django框架一起使用。前端开发人员将改变一点点与模板已经作出。你知道吗

当我在Youtube上观看pycon视频时,有人说Djang框架有点过于耦合。你知道吗

我希望我能得到的想法更有效地使用Django模型形式与前端开发人员。你知道吗

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


Tags: djangonamepyform模板id示例input