【问题标题】:form not display on html, django表单不显示在html,django上
【发布时间】:2020-06-03 20:24:13
【问题描述】:

我尝试创建一个允许用户发帖的博客,将帖子连同发布的日期时间和发布者一起存储在数据库中。

我的问题是我无法将 {{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 %}

urls.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

Views.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)


forms.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()

【问题讨论】:

  • 打开浏览器的检查器 - 或使用 curl 或其他方式获取响应内容 - 并检查 html。
  • {{ form.as_p }} 工作吗?
  • 不,我不知道为什么...找不到我丢失的东西

标签: python html django web


【解决方案1】:

将模板更新为{{ form.as_table }},而不是{{form}}

【讨论】:

  • 谢谢,但将其更改为 {{ form.as_table }} 不起作用
猜你喜欢
  • 2019-04-25
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 2019-11-06
  • 1970-01-01
  • 2017-09-04
  • 2019-01-08
  • 1970-01-01
相关资源
最近更新 更多