Python Django错误:匹配的查询不存在

Python Django错误:匹配的查询不存在,python,django,Python,Django,我正在处理一个博客项目,我得到了“匹配查询不存在”错误。我尝试使用try块,认为模型类可能不会返回任何值。因此,将my views.py修改如下:- from django.shortcuts import render, HttpResponseRedirect from django.contrib.auth import authenticate, login, logout from django.contrib.auth.models import User from django.c

我正在处理一个博客项目,我得到了“匹配查询不存在”错误。我尝试使用try块,认为模型类可能不会返回任何值。因此,将my views.py修改如下:-

from django.shortcuts import render, HttpResponseRedirect
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User
from django.contrib.auth.hashers import make_password
from django.db.models import Q
from .forms import *

# Create your views here.

def home(request):
    print("I am home")
    try:
        blog_data = BlogPost.objects.all()
        print("blog_data", blog_data)
    except BlogPost.DoesNotExist:
        blog_data = None
        print("blog_data", blog_data)
    try:
        last_element = BlogPost.objects.filter(id = len(blog_data))[0]
        print("last_element", last_element)
    except BlogPost.DoesNotExist:
        last_element = None
        print("last_element", last_element)
    tags_list = BlogPost.objects.values_list("tags", flat = True).distinct()
    #tags_list = BlogPost.objects.all().distinct()
    context = {'blog_data':blog_data, "last_element":last_element, "tags_list":tags_list}
    #last_element = list(BlogPost.objects.all().reverse()[0])
    print("last_element",last_element, "blog_data",blog_data,"context",context)
    return render(request, 'blog/home.html', context)

# def home(request):   
#     blog_data = BlogPost.objects.all()
#     context = {'blog_data':blog_data}   
#     print('context', context)
#     last_element = BlogPost.objects.all().reverse()[0]
#     #last_element = BlogPost.objects.all().reverse()[0]
#     return render(request, 'blog/home.html', context)
def new_post(request):      
    if request.method == 'POST':        
        form = BlogForm(data = request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('home')
    else:
        form = BlogForm()       
    return render(request, 'blog/blogform.html', {'form':form })

def login_user(request): 
    username = password = ''
    state = "Please log in"    
    if request.POST:        
        username = request.POST.get('Username')
        password = request.POST.get('Password')         
        user = authenticate(username=username, password=password)              
        if user is not None:
            if user.is_active:
                login(request, user)
                state = "You're successfully logged in!"
                return HttpResponseRedirect('/blog/home')
            else:
                state = "Your account is not active, please contact the site admin."
        else:
            state = "Your username and/or password were incorrect."

    #return render_to_response('main/login.html',{'state':state, 'username': username})
    return render(request, "blog/login.html", {'state':state, 'username': username, 'next_page':"home.html"})
    #return HttpResponseRedirect("home.html")

def logout_user(request): 
    logout(request)
    return render(request,'blog/home.html')

def register_user(request):
    username = password = password_again = email = ''
    state = ''
    if request.method == 'POST':
        username = request.POST.get('Username')
        password = request.POST.get('Password')
        password_again = request.POST.get('Password_again')
        email = request.POST.get('Email')
        print('email', email)
        if password == password_again:
            password = make_password(password, salt = None, hasher = 'default')
        else:
            state = "Password and password re-entered do not match, please try again..."
            return HttpResponseRedirect('login')
        print("at 63")
        try:
            user = User.objects.get(username = username)
            print('user at 67', user)
        except Exception as e:
            print("Error is :", e)
            user = None
        print("user", user)
        try:
            emailID = User.objects.get(email = email)
            print("emailID", emailID)
        except Exception as e:
            print("Error is :", e)
            emailID = None
            print("emailID exception", emailID)        
        if user is not None:
            state = 'Username already exists, please try another one...'
        else:
            if emailID is None:
                new_user = User(username = username, password = password, email = email)
                ##Adding new logic for securityQAs vvv
                #new_SQA = SecurityQA(user_email = email, security_question = security_question, security_answer = security_answer)
                ##Adding new logic for securityQAs ^^^
                new_user.save()
                #new_SQA.save()
                state = 'You are successfully registered.. Thanks'
                return HttpResponseRedirect('login')
            else:
                state = "Email ID already registered, try a new one.."
                print('state at else', state)
                #return HttpResponseRedirect('login')
        
    return render(request, "blog/register.html", {'state':state, 'username':username, 'next_page':'home.html'})

def forgot_password(request):
    pass
def comment_posted(request):
    return render(request, "blog/comment_posted.html")

def blog_search(request):
    qset = Q()
    keyword = ''
    keyword = request.POST.get('keyword')
    print("keyword", keyword)
    for word in keyword.split():
        qset |= (Q(title__contains = word)|Q(description__contains = word))

    print('qset', qset)
    result = BlogPost.objects.filter(qset)
    context = {'result':result}
    return render(request, 'blog/blog_search.html', context)
另外,请在下面找到my models.py

from django.db import models
from django.contrib.auth.models import User
#from django.core.files.storage import FileSystemStorage

#fs = FileSystemStorage(location='E:\django\myblog\\blog\uploaded images')
# Create your models here.
class BlogPost(models.Model):
    title = models.CharField(max_length = 30)
    posted_by = models.CharField(max_length = 30)
    posted_on = models.DateTimeField(auto_now_add = True)
    description = models.CharField(max_length = 200)
    comment = models.CharField(max_length = 150) 
    tags = models.CharField(max_length=50, default = "notag")
    image = models.ImageField(upload_to = 'uploaded_images', default = None, null = True, blank = True)

    def __str__(self):
        #return "{0} : {1}".format(self.title, self.description)
        return self.title
模板代码如下(home.html)。在这里,我在第“{%get_comment_list for blog.blogpost last_element.id as comment_list%”行中得到错误

{%load staticfiles%}
{%loadcomments%}
苏拉夫的博客
{%块样式%}
{%endblock样式%}
切换导航
  • {{user.is_authenticated} {%if user.u经过身份验证%}
  • {%else%}
  • {%endif%}
  • {%if user.u经过身份验证%}
  • {%else%} {%endif%}
创意博客

通过


张贴在 {{last_element.posted_on}}

{{last_element.title}}由{{last_element.posted_by}发布 描述:{last_element.Description}}

{{last_element.image} 标记:{last_element.Tags}

{%get_comment_count for blog.blogpost last_element.id as comment_count%} {{comment\u count}}评论已经发布。

{%get_comment_list for blog.blogpost 1 as comment_list%} {注释列表%中的注释为%0} 发布人:{{comment.user_name}}在{{comment.submit_date}上发布

注释:{{Comment.Comment}}

{%endfor%} {%get_comment_form for blog.blogpost last_element.id as form%} {%csrf_令牌%} {{form}} {%get_comment_list for blog.blogpost last_element.id as comment_list%} {注释列表%中的注释为%0}
  • {{comment.name}已在{{comment.submit_date}上发布了评论
    • {{comment.comment}
      • {%endfor%}

        博客搜索 {%csrf_令牌%} 标签
          {标记中的%u列表%} {%endfor%}
        侧井 Lorem ipsum dolor sit amet,奉献精英。发明人,是一位名叫阿迪皮斯·阿迪皮斯·库萨姆斯·劳丹提姆·阿迪奎姆·阿迪皮斯·阿迪皮斯·阿迪皮斯·阿迪皮斯·阿迪皮斯·阿迪皮斯·阿迪皮斯·阿迪皮斯·阿迪皮斯·阿迪姆·阿迪奎姆·阿


        版权及副本;您的网站2014

        {% load staticfiles %}
        {%load comments%}
        <!DOCTYPE html>
        <html lang="en">
        
        <head>
        
            <meta charset="utf-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <meta name="description" content="">
            <meta name="author" content="">
        
            <title>Sourav's blog</title>
        
            <!-- Bootstrap Core CSS -->
            {%block styling%}
            <link href="{%static 'css/bootstrap.min.css'%}" rel="stylesheet">
        
            <!-- Custom CSS -->
            <link href="{%static 'css/blog-post.css'%}" rel="stylesheet">
        
            {%endblock styling%}
        
            <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
            <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
            <!--[if lt IE 9]>
                <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
                <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
            <![endif]-->
        
        </head>
        
        <body>
        
            <!-- Navigation -->
            <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
                <div class="container">
                    <!-- Brand and toggle get grouped for better mobile display -->
                    <div class="navbar-header">
                        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                            <span class="sr-only">Toggle navigation</span>
                            <span class="icon-bar"></span>
                            <span class="icon-bar"></span>
                            <span class="icon-bar"></span>
                        </button>
                        <a class="navbar-brand" href="#">Ideate</a>
                    </div>
                    <!-- Collect the nav links, forms, and other content for toggling -->
                    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                        <ul class="nav navbar-nav">
                            <li>
                                <a href="{%url 'blog_new_post'%}">New idea</a>
                            </li>
                            <!-- <li><a href="{%url 'blog_login'%}">Login</a></li> -->
                            {{user.is_authenticated}}
                            {% if user.is_authenticated %}
                            <li>
                                <a href="{%url 'blog_logout'%}">Logout</a>
                            </li>
                            {% else %}
                            <li>
                                <a href="{%url 'blog_login'%}">Login</a>
                            </li>
                            {% endif %}
                            <li>
                                <a href="#">Help</a>
                            </li>
                            {% if user.is_authenticated %}
                            <li>
                                <a href="#">Hi {{user.username}}</a>
                            </li>
                            {%else%}
        
                            {% endif %}
                        </ul>
                    </div>
                    <!-- /.navbar-collapse -->
                </div>
                <!-- /.container -->
            </nav>
        
            <!-- Page Content -->
            <div class="container">
        
                <div class="row">
        
                    <!-- Blog Post Content Column -->
                    <div class="col-lg-8">
        
                        <!-- Blog Post -->
        
                        <!-- Title -->
                        <h1>Idea Blog</h1>
        
                        <!-- Author -->
                        <p class="lead">
                            by <a href="#">Sourav</a>
                        </p>
        
                        <hr>
        
                        <!-- Date/Time -->
                        <p><span class="glyphicon glyphicon-time"></span> 
                        Posted on
                        <!-- {%for i in blog_data%} 
                            {{i.posted_on}}
                        {%endfor%}</p> -->
                        {{last_element.posted_on}}
                        
        
                        <hr>
        
                        <!-- Preview Image -->
                        <img class="img-responsive" src="http://placehold.it/900x300" alt="">
        
                        <hr>
        
                        <!-- Post Content -->
                        <!-- <p>Below is the result</p> -->
                        <!-- <p>{{blog_data}}</p> -->
                        <p>
                            
                            <!-- {%for i in blog_data%}                        
                               <h1>{{i.title}}</h1> 
                               <p>{{i.description}}</p>  
        
                            {%empty%}
                                <span>No data</span>
                            {%endfor%} -->
                            <!-- {{last_element}} -->
                            <h1>{{last_element.title}}</h1><span> posted by {{last_element.posted_by}}</span>
                            <p>Description : {{last_element.description}}</p>
                            {{last_element.image}}
                            <p>Tags : {{last_element.tags}}</p>
                            
                            {% get_comment_count for blog.blogpost last_element.id as comment_count %}
                            <p>{{ comment_count }} comments have been posted.</p> 
        
                            {% get_comment_list for blog.blogpost 1 as comment_list %}
                            {% for comment in comment_list %}
                            <p>Posted by: {{ comment.user_name }} on {{ comment.submit_date }}</p>
                            
                            <p>Comment: {{ comment.comment }}</p>
                            
                            {% endfor %}
                           
        
                            {% get_comment_form for blog.blogpost last_element.id as form %}
                            <!-- A context variable called form is created with the necessary hidden
                            fields, timestamps and security hashes -->
                            <table>
                              <form action="{% comment_form_target %}" method="post">
                                {% csrf_token %}
                                {{ form }}
                                <tr>
                                  <td colspan="1">
                                    <input type="submit" name="submit" value="Post">
                                    <input type="submit" name="preview" value="Preview">
                                    <input type="hidden" name="next" value="{% url 'comment_posted' %}" />
                                  </td>
                                </tr>
                              </form>
                            </table>
                                                
                        {% get_comment_list for blog.blogpost last_element.id as comment_list %}
                        {%for comment in comment_list%}
                            <li><b>{{comment.name}}</b> has posted comment on {{comment.submit_date}} </li>
                                <ul><li>{{comment.comment}}</li></ul>
                            <a name="c{{ comment.id }}"></a>
                            <a href="{% get_comment_permalink comment %}">
                                see comment details
                            </a>
                        {%endfor%}
                        </p>               
                        
                        
                        
                            </div>
                            <div class="col-md-4">
        
                        <!-- Blog Search Well -->
                        <form action = "{%url 'blog_search'%}" method = "POST">
                        <div class="well">
                            <h4>Blog Search</h4>                    
                            <div class="input-group">                        
                                {%csrf_token%}
                                <input type="text" class="form-control" name = "keyword", placeholder = "Enter search keyword">
                                <span class="input-group-btn">
                                    <button class="btn btn-default" type="submit">
                                        <span class="glyphicon glyphicon-search"></span>
                                </button>
                                </span>                        
                            </div>                    
                            <!-- /.input-group -->
                        </div>
                        </form>
        
                        <!-- Blog Categories Well -->
                        <div class="well">
                            <h4>Tags</h4>
                            <div class="row">
                                <div class="col-lg-6">
                                    <ul class="list-unstyled">
                                        <!-- {%for a in tags_list%}
                                            <a href="">{{a}}</a>
                                        {%endfor%} -->
                                        <!-- {%for a in tags_list%}
                                            <a href="">{{a}}</a>
                                        {%endfor%} -->
                                        {%for a in tags_list%}
                                            <a href="">{{a}},</a>
                                        {%endfor%}
                                        <!-- <li><a href="#">Category Name</a>
                                        </li>
                                        <li><a href="#">Category Name</a>
                                        </li>
                                        <li><a href="#">Category Name</a>
                                        </li>
                                        <li><a href="#">Category Name</a>
                                        </li> -->
                                    </ul>
                                </div>
                                <div class="col-lg-6">
                                    <ul class="list-unstyled">
                                        <li><a href="#">Category Name</a>
                                        </li>
                                        <li><a href="#">Category Name</a>
                                        </li>
                                        <li><a href="#">Category Name</a>
                                        </li>
                                        <li><a href="#">Category Name</a>
                                        </li>
                                    </ul>
                                </div>
                            </div>
                            <!-- /.row -->
                        </div>
        
                        <!-- Side Widget Well -->
                        <div class="well">
                            <h4>Side Widget Well</h4>
                            <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Inventore, perspiciatis adipisci accusamus laudantium odit aliquam repellat tempore quos aspernatur vero.</p>
                        </div>
        
                    </div>
        
                </div>
                        </div>
        
                    </div>
        
                    <!-- Blog Sidebar Widgets Column -->
                    
                <!-- /.row -->
        
                <hr>
        
                <!-- Footer -->
                <footer>
                    <div class="row">
                        <div class="col-lg-12">
                            <p>Copyright &copy; Your Website 2014</p>
                        </div>
                    </div>
                    <!-- /.row -->
                </footer>
        
            </div>
            <!-- /.container -->
        
            <!-- jQuery -->
            {%block javascript%}
            <script src="{%static 'js/jquery.js'%}"></script>
        
            <!-- Bootstrap Core JavaScript -->
            <script src="{%static 'js/bootstrap.min.js'%}"></script>
            {%endblock javascript%}
        
        </body>
        
        </html>