Python 如何将django模型表单放入现成的模板中

Python 如何将django模型表单放入现成的模板中,python,html,css,django,django-forms,Python,Html,Css,Django,Django Forms,我有一个模型表单,允许用户发布和上传图片。它在空白模板上正常工作。所以现在我想把表单放在一个现成的模板中,这个模板有创建帖子和上传图片的字段。 页面如下所示: My models.py: class Post(models.Model): post = models.CharField(max_length=3000) pic = models.ImageField(blank=True) user = models.ForeignKey(User, on_delete

我有一个模型表单,允许用户发布和上传图片。它在空白模板上正常工作。所以现在我想把表单放在一个现成的模板中,这个模板有创建帖子和上传图片的字段。 页面如下所示:

My models.py:

class Post(models.Model):
    post = models.CharField(max_length=3000)
    pic = models.ImageField(blank=True)
    user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
Forms.py

class PostForm(forms.ModelForm):
    post = forms.CharField(widget=forms.TextInput())
views.py

class BaseView(TemplateView):
    template_name = 'base.html'

    def get(self, request):
        form = PostForm()
        posts = Post.objects.all().order_by('-created')
        users = User.objects.exclude(id=request.user.id)

        args = {'form': form,'users': users, 'posts': posts}
        return render(request, self.template_name, args)
    
    def post(self, request):
        form = PostForm(request.POST, request.FILES)
        if form.is_valid():
            post = form.save(commit=False)
            post.user = request.user
            post.save()
            
            pics = form.cleaned_data['pic']
            text = form.cleaned_data['post']
            form = PostForm()
            return redirect('base')

        args = {'form': form, 'text': text, 'pics':pics}
        return render(request, self.template_name, args)

在模板中,我要使用的字段如下所示:

<div class="create-post">
                <div class="row">
                    <div class="col-md-7 col-sm-7">
                  <div class="form-group">
                    <img src="images/users/user-1.jpg" alt="" class="profile-photo-md" />
                    <textarea name="texts" id="exampleTextarea" cols="30" rows="1" class="form-control" placeholder="Write what you wish"></textarea>
                  </div>
                </div>
                    <div class="col-md-5 col-sm-5">
                  <div class="tools">
                    <ul class="publishing-tools list-inline">
                      <li><a href="#"><i class="ion-images"></i></a></li>
                    </ul>
                    <button class="btn btn-primary pull-right">Publish</button>
                  </div>
                </div>
                </div>
            </div>

发表

如果你知道我如何解决这个问题,请帮帮忙。谢谢。

您需要根据此处的文档手动呈现表单字段:

因此,对于您的模板,它看起来像这样(略图):


{{form.pic}
{{form.post}}
发表

您可以在ModelForm中指定小部件(例如,post字段的textarea)。您可以在此处看到示例:

您需要根据此处的文档手动呈现表单字段:

因此,对于您的模板,它看起来像这样(略图):


{{form.pic}
{{form.post}}
发表

您可以在ModelForm中指定小部件(例如,post字段的textarea)。您可以在这里看到示例:

使用普通的{{form}}标记获取表单字段id, 使用browser developer工具检查并获取字段名和id 将名称和id添加到相应输入的现成表单中 例如,如果文本区域的渲染字段id为id\u post,则将id\u post添加为文本区域id。。。。。 还可以将PostModelForm小部件更改为文本区域,以生成现成的表单

 class PostForm(forms.ModelForm):
         post = forms.CharField(widget=forms.Textarea())

<textarea name="post" id="id_post" cols="30" rows="1" class="form- 
     control" placeholder="Write what you wish"></textarea>
class PostForm(forms.ModelForm):
post=forms.CharField(widget=forms.Textarea())

使用普通的{{form}}标记获取表单字段id, 使用browser developer工具检查并获取字段名和id 将名称和id添加到相应输入的现成表单中 例如,如果文本区域的渲染字段id为id\u post,则将id\u post添加为文本区域id。。。。。 还可以将PostModelForm小部件更改为文本区域,以生成现成的表单

 class PostForm(forms.ModelForm):
         post = forms.CharField(widget=forms.Textarea())

<textarea name="post" id="id_post" cols="30" rows="1" class="form- 
     control" placeholder="Write what you wish"></textarea>
class PostForm(forms.ModelForm):
post=forms.CharField(widget=forms.Textarea())

只需在现成表格中引用您的字段id只需在现成表格中引用您的字段id谢谢。它对文章有效,但对于图片,我尽了一切可能,但找不到办法。它显示默认的选择文件图标。我不想要它。无论如何,非常感谢您,您必须调整文件上传的输入标记以使用图标,看看这可能会有帮助,谢谢。它对文章有效,但对于图片,我尽了一切可能,但找不到办法。它显示默认的选择文件图标。我不想要它。无论如何,非常感谢您,您必须调整文件上传的输入标记以使用图标,看看这可能会有所帮助