在搭建报名系统时遇到的django报错


报错1:

The view sign_up.views.new_user didn't return an HttpResponse object. It returned None instead.
views.py代码
def new_user(request):
    if request.method != 'POST':
        form = UserInfoForm()
    else:
        form = UserInfoForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('sign_up:index'))

        context = {'form':form}
        return render(request,'new_user.html',context)
models.py代码
class User_info(models.Model):
    name = models.CharField(max_length=100)
    student_id = models.CharField(max_length=9)
    college = models.CharField(max_length=100)
    date_added = models.DateField(auto_now_add=True)

    def __str__(self):
        return self.name
new_user.html代码
{% extends 'sign_up/index.html' %}
{% block header %}
    <div>请填写信息</div>
{% endblock %}
{% block content %}
    <form action="{% url 'sign_up:new_user' %}" method="post">
    {% csrf_token %}
    {% form.as_p %}
    <button type="submit">Add user</button>
    </form>
{% endblock %}

错误原因:当时报错时查询各种资料以及函数都没有解决。。。最后发现是由于views.py文件中的没有返回值,return错位导致。

正确代码如下:

def new_user(request):
    if request.method != 'POST':
        form = UserInfoForm()
    else:
        form = UserInfoForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('sign_up:index'))

    context = {'form':form}
    return render(request,'new_user.html',context)

报错2:

这里写图片描述

Invalid block tag on line 8: 'form.as_p', expected 'endblock'. Did you forget to register or load this tag?

错误原因:前端模版中form.as_p应该放在{{ }}中,而不是{% %}中


报错3:

这里写图片描述

no such table: sign_up_actor_info

错误原因:应当使用python manage.py makemigrations以及`python manage.py migrate来迁移数据库以及修改数据库即可


报错4:

Specifying a namespace in include() without providing an app_name

错误原因:python3 Django 环境下,如果你遇到namespace没有注册以及在根目录下urls.py中的include方法的第二个参数namespace添加之后就出错的问题。请在[app_name]目录下的urls.py中的urlpatterns前面加上app_name=’[app_name]’, [app_name]代表你的应用的名称。


报错5:

![这里写图片描述](//img-blog.csdn.net/20180313203700214?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3FxXzM4NTQyMDg1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

错误原因:将根目录下的url(r'^users/$',include('users.urls',namespace='users')),中的$删除


报错6:

这里写图片描述

@login_required
def new_actor(request):
    if request.method != 'POST':
        form = ActorInfoForm()
    else:
        form = ActorInfoForm(data=request.POST)
        if form.is_valid():
            new_actor = form.save()
            new_actor.owner = request.user
            new_actor.save()
            return HttpResponseRedirect(reverse('sign_up:index'))

    context = {'form':form}
    return render(request, 'sign_up/new_actor.html', context)

错误原因:在第一次form.save时应该是用参数commit=False,使其不上传到数据库,因为后面还要对其信息进行添加

正确代码如下:

@login_required
def new_actor(request):
    if request.method != 'POST':
        form = ActorInfoForm()
    else:
        form = ActorInfoForm(data=request.POST)
        if form.is_valid():
            new_actor = form.save(commit=False) #commit=False指不要提交到数据库
            new_actor.owner = request.user
            new_actor.save()
            return HttpResponseRedirect(reverse('sign_up:index'))

    context = {'form':form}
    return render(request, 'sign_up/new_actor.html', context)

报错7:

'QuerySet' object has no attribute 'owner'

这里写图片描述

@login_required
def edit_actor(request,actor_id):
    actor = Actor_info.objects.filter(id=actor_id)
    if actor.owner != request.user:
        raise Http404
    if request.method == 'POST':
        college = request.POST.get('college')
        student_id = request.POST.get('student_id')
        name = request.POST.get('name')
        Actor_info.objects.filter(id=actor_id).update(
            college=college,student_id=student_id,name=name
        )
        return HttpResponseRedirect(reverse('sign_up:actor',args={'actor_id':actor_id}))

    context = {'actor':actor}
    return render(request,'sign_up/edit_actor.html',context=context)

错误原因:应该使用get而不是filter

正确代码如下:

@login_required
def edit_actor(request,actor_id):
    actor = Actor_info.objects.get(id=actor_id)
    if actor.owner != request.user:
        raise Http404
    if request.method == 'POST':
        college = request.POST.get('college')
        student_id = request.POST.get('student_id')
        name = request.POST.get('name')
        Actor_info.objects.filter(id=actor_id).update(
            college=college,student_id=student_id,name=name
        )
        return HttpResponseRedirect(reverse('sign_up:actor',args=[actor_id]))

    context = {'actor':actor}
    return render(request,'sign_up/edit_actor.html',context=context)

报错8:

Reverse for 'actor' with no arguments not found. 1 pattern(s) tried: ['actors/(?P<actor_id>\\d+)/$']
Request Method: POST

这里写图片描述

@login_required
def edit_actor(request,actor_id):
    actor = Actor_info.objects.get(id=actor_id)
    if actor.owner != request.user:
        raise Http404
    if request.method == 'POST':
        college = request.POST.get('college')
        student_id = request.POST.get('student_id')
        name = request.POST.get('name')
        Actor_info.objects.filter(id=actor_id).update(
            college=college,student_id=student_id,name=name
        )
        return HttpResponseRedirect(reverse('sign_up:actor'),args=[actor_id])

    context = {'actor':actor}
    return render(request,'sign_up/edit_actor.html',context=context)

错误原因:args为reverse函数的参数,而不是HttpResponseRedirect的参数

正确代码如下:

@login_required
def edit_actor(request,actor_id):
    actor = Actor_info.objects.get(id=actor_id)
    if actor.owner != request.user:
        raise Http404
    if request.method == 'POST':
        college = request.POST.get('college')
        student_id = request.POST.get('student_id')
        name = request.POST.get('name')
        Actor_info.objects.filter(id=actor_id).update(
            college=college,student_id=student_id,name=name
        )
        return HttpResponseRedirect(reverse('sign_up:actor',args=[actor_id]))

    context = {'actor':actor}
    return render(request,'sign_up/edit_actor.html',context=context)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值