django2搜索表单UnboundLocalError位于/

时间:2018-07-24 11:10:35

标签: django

我尝试使用此代码添加搜索框,但出现错误:

  

空白结果

def home(request):
    if 'search' in request.GET:
        term = request.GET['search']
        name = Products.objects.filter(titulo__icontains=term)
    return render(request,'base.html', {'name':name})

在模型中:

from django.db import models
    class Products(models.Model):
        name = models.CharField(max_length=255, blank=True, null=True)
      def __str__(self):
            return self.name

欣赏

from django.shortcuts import render
from .models import Products
def home(request):
    if 'search' in request.GET:
        term = request.GET['search']
        item = Products.objects.filter(name__icontains=term)
    return render(request,'base.html', {'item':item})

如果我用这个我得到了错误 分配前已引用本地变量“名称” 如果我添加了变量名

from django.shortcuts import render
    from .models import Products
    def home(request):
        item=none
        if 'search' in request.GET:
            term = request.GET['search']
            item = Products.objects.filter(name__icontains=term)
        return render(request,'base.html', {'item':item}) 

编辑了第二个视图,使用此视图我没有结果

{{Products.name}}
html文件上的

我也尝试:

def home(request):
    query = request.GET.get('search',None)
    items = Products.objects.all()
    if query is not None:
        items = items.filter(
            Q(items__contains=query)
            )
    context = {'items':items}
    return render(request, 'base.html', context)

1 个答案:

答案 0 :(得分:2)

在所有视图中,您或多或少会犯相同的错误:

function slurm_job_submit(job_desc, part_list, submit_uid)
    slurm.log_info("job submit plugin called")

    if job_desc.time_limit >= 4294967294 then
            slurm.log_user("Please enter a valid time limit, your time: %d", job_desc.time_limit)
            return slurm.ESLURM_INVALID_TIME_LIMIT
    end
    return slurm.SUCCESS
end

function slurm_job_modify(job_desc, job_rec, part_list, modify_uid)
end

slurm.log_info("initialized")

您在此处定义一个变量,例如def home(request): if 'search' in request.GET: term = request.GET['search'] name = Products.objects.filter(titulo__icontains=term) return render(request,'base.html', {'name': name})正文中的name 。但是现在假设if语句中的条件 not 为true,那么它将跳过主体。在if正文之后,您使用 if变量。现在,如果该语句不正确,则可以使用从未定义的变量。

例如,可以通过首先定义默认值来解决此问题:

name

现在,如果条件不成立,则仍会设置变量,因为我们在def home(request): name = Products.objects.all() if 'search' in request.GET: term = request.GET['search'] name = Products.objects.filter(titulo__icontains=term) return render(request,'base.html', {'name': name})语句的之前定义了变量,例如,我们返回的不是所有乘积。 / p>

在您的第二个视图中,同样的情况发生了,但是罪魁祸首是if变量。