繁体   English   中英

表单未显示在 html、django 上

[英]form not display on html, django

我试图制作一个允许用户发帖的博客,将帖子连同发帖日期时间和发帖人一起存储在数据库中。

我的问题是我以某种方式无法将 {{form}} 加载到我的 UI,这使我的表单无效,我只是不知道为什么它不显示输入文本框。 用户界面

我不确定是否需要 get_post 函数,但我会将它放在 views.py 中。 (我还没有写那部分的 html。只需要先看看表格。)我对 Django 很陌生,有人可以帮我解决这个问题吗!!! 谢谢!

下面是我的文件。

blog.html 文件:

{% block posts %}
<div>
<span>New Post: </span>
<form method="post" action="{% url 'posts' %}" enctype="multipart/form-data">
            {% csrf_token %}
            <table>
                {{form}}
                <!--not showing in UI-->
            </table>
            <input id="id_post_button" type="submit" value="Submit" /><br>
</form>
<div>
{% endblock %}

网址.py

urlpatterns = [
    path('posts', views.post_action, name='posts'),
    path('post/<int:id>', views.get_post, name='post'),
]

模型.py

class PostModel(models.Model):
    user_id = models.IntegerField()
    post_input_text = models.CharField(max_length=100)
    post_profile = models.CharField(max_length=30)
    post_date_time = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return 'id=' + str(self.user_id) + ", post_date_time=" + self.post_date_time + ", post_input_text=" + self.post_input_text + ", post_profile=" + self.post_profile

视图.py:

@login_required
def post_action(request):
    print("----post action---")
    context = {}
    if request.method == "GET":
        context['form'] = CreatePost()
        context['posts']= PostModel.objects.get(user_id = request.user.id)
        return render(request, "socialnetwork/blog.html", context)

    form = CreatePost(request.POST, request.FILES)
    if not form.is_valid():
        print("not valid ~~~~~~~~")
        context['form'] = form
        context['posts'] = PostModel.objects.get(user_id = request.user.id)
        return render(request, "socialnetwork/blog.html", context)

    post_input_text = form.cleaned_data.get("post_input_text")
    post_date_time = form.cleaned_data.get("post_date_time")
    post_profile = form.cleaned_data.get("post_profile")
    obj = PostModel.objects.get(
        user_id = request.user.id,
    )
    obj.post_input_text = form.cleaned_data.get("post_input_text")
    obj.post_date_time = form.cleaned_data.get("post_date_time")
    obj.post_profile = form.cleaned_data.get("post_profile")
    obj.save()
    form = CreatePost() #refresh the form to original state

    context['form'] = form
    context['posts'] = obj
    return render(request, "socialnetwork/blog.html", context)


def get_post(request, id):
    item = get_object_or_404(PostModel, id=id)
    print('Picture #{} fetched from db: {} (type={})'.format(id, item.post_input_text, item.post_profile, item.post_date_time))
    if not item.post_input_text:
        raise Http404
    return HttpResponse(item.post_input_text)


表格.py

class CreatePost(forms.Form):
    post_input_text = forms.CharField(max_length=100)
    post_profile = forms.CharField(max_length=30)
    post_date_time = forms.DateTimeField()

使用{{ form.as_table }}更新模板,而不是{{form}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM