【问题标题】:how to display message throw html page if i enter duplicate values throw html page while error message not displayed如果我输入重复的值,如何显示消息抛出 html 页面抛出 html 页面而不显示错误消息
【发布时间】:2019-10-20 15:32:41
【问题描述】:

如果我发布值保存在数据库中的值,如果值重复,它会显示消息,例如值不能通过呈现 html 页面来复制。在我的情况下,值存储在数据库中,但如果输入任何重复的值,则会抛出错误。如果输入任何重复值,如何显示消息。 views.py文件中有没有方法方法

1062, "Duplicate entry 'django_post' for key 'title'"

这里是models.py代码

 class Post(models.Model):
     title= models.CharField(max_length=100, unique=True)
     content= models.TextField()

查看.py文件

def createpost(request):
   if request.method == 'POST':
       if request.POST.get('title') and request.POST.get('content'):
            post = Post()
            post.title = request.POST.get('title')
            post.content = request.POST.get('content')
            post.save()

       return render(request, 'emp.html')

emp.html 文件

<html lang="en">
<head>
<title>Create a Post </title>
</head>

<body>
<h1>Create a Post </h1>
<form action=" " method="POST">
{% csrf_token %}
Title: <input type="text" name="title"/><br/>
Content: <br/>
<textarea cols="35" rows="8" name="content">
</textarea><br/>
<input type="submit" value="Post"/>
</form>
</body>

</html>

这是我通过html页面发布数据后要给html页面的html文件

复制.html 文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>Duplicate values are entered</h1>

</body>
</html>

【问题讨论】:

    标签: python django django-templates django-views


    【解决方案1】:

    您可以在成功保存数据库中的数据后渲染inserted.html。为此,您可以将视图 createpost 更改为:

    def createpost(request):
       if request.method == 'POST':
           if request.POST.get('title') and request.POST.get('content'):
                post = Post()
                post.title = request.POST.get('title')
                post.content = request.POST.get('content')
                post.save()
                return render(request, 'inserted.html')
    
           return render(request, 'emp.html')
    

    【讨论】:

    • 它在 /empdetails 显示此错误,例如 ValueError 视图 firstapp.views.createpost 没有返回 HttpResponse 对象。它返回 None 。
    • 我想,问题出在html页面上。
    • 你的正确。但有一个小变化。该更改首先是 return render(request,'emp.html'),其次是 return render(request, 'inserted.html')
    【解决方案2】:

    使用下面的行重定向到您喜欢的任何地址,

    return HttpResponseRedirect("https://www.another-url.com")
    

    你需要导入from django.http import HttpResponseRedirect

    【讨论】:

    • 如何使用链接('www/another-url.com'')。但是我已经插入了.html
    • 输入您要在您的域example/page 上为页面提供服务器的地址,或者只需添加 /page
    【解决方案3】:

    您应该更改 HTML 页面:

    替换你的代码:

    return render(request, 'emp.html')
    

    收件人:

    return render(request, 'inserted.html')
    

    或者

    在里面添加return语句:

     if request.POST.get('title') and request.POST.get('content'):
        ......
    
        return render(request, 'inserted.html')
    

    models.py

    class Post(models.Model):
         title= models.CharField(max_length=100, unique=True)
         content= models.TextField()
    

    由于您定义title 必须是唯一的,因此您需要处理重复的异常并在 UI 端显示错误消息。

    view.py

    在 try except 块中写下你的存档代码:

    try:
        post = Post()
        post.title = request.POST.get('title')
        post.content = request.POST.get('content')
        post.save()
    except IntegrityError as e:
        # add your error message
    

    this 链接将帮助您如何添加和显示错误消息。

    【讨论】:

    • 我试过但显示此错误 :: ValueError: The view firstapp.views.createpost 没有返回 HttpResponse 对象。它返回 None 。
    • 面临的另一个问题是,如果我通过 html 模板发布重复值,则会显示错误 :: (1062, "Duplicate entry 'django_post' for key 'title'")
    • 你不应该这样做。成功发布后始终重定向。
    • @DanielRoseman 你能详细解释一下我不应该这样做的部分吗
    • @DanielRoseman 这不是关于重定向页面,而是关于渲染页面。
    猜你喜欢
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    相关资源
    最近更新 更多