• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Django常见出错解决方案汇总

python 搞java代码 3年前 (2022-05-24) 24次浏览 已收录 0个评论

一、模板类型错误:

错误原因:在models中漏掉了return:

class UserProfile(models.Model):
     user=models.OneToOneField(User,blank=True,null=True,related_name='user',verbose_name=_(u'用户'))
     company_name=models.CharField(u'企业(或代理商)名称',max_length=30, default='未知')     #企业商名称
     product=models.ForeignKey(Product, blank=True,null=True,verbose_name=_(u'产品'))        #产品
     class Meta:
         verbose_name = _(u'配置')
         verbose_name_plural = _(u'用户配置')
     def __unicode__(self):
         【这里】_(u'%(user_name)s') % {'user_name':self.user.username}

www#gaodaima.com来源gaodaima#com搞(代@码网搞代码

【这里】加上return即可。

二、url相关错误

静态文件无法访问,如样式出不来

css样式总出不来,折腾了一个多小时,原来,urlpatterns 写成这样:

urlpatterns = patterns('',
     (r'^ $','login.msg.index'), #首页
)
#登录注册
urlpatterns = patterns('',
     (r'^accounts/register/$','login.msg.register_page'), #注册
     (r'^accounts/login/$','login.msg.login'),      #登录 
     (r'^accounts/logout/$','<a href="https://www.gaodaima.com/tag/django" title="查看更多关于django的文章" target="_blank">django</a>.contrib.auth.views.logout',{'next_page':'/'}),  #Django提供一个专用于处理登出表单函数logout
     (r'^accounts/register/success/$','django.views.generic.simple.direct_to_template',{'template':'registration/register_success.html'}),  #注册成功  
)
 
#admin后台管理
urlpatterns += patterns('',
     (r'^admin/doc/', include('django.contrib.admindocs.urls')),
     (r'^admin/', include(admin.site.urls)),
)
#静态文件的访问
urlpatterns += patterns('',
     (r'^site_media/(?P.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_SITE}),
     (r'^upload_media/(?P.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
)

我把 [登录注册] url后面也写成 = 而并非+= ,这就造成了url覆盖,所以就加载不了静态文件,同时首页也会打不开。

三、编码错误

错误类型如下:

DjangoUnicodeDecodeError at /admin/books/book/
'ascii' codec can't decode byte 0xe8 in position 0: ordinal not in range(128). You passed in()

解决方案:

混淆了 python2 里边的 str 和 unicode 数据类型。

(0)、你需要的是让编码用实际编码而不是 ascii

(1)、对需要 str->unicode 的代码,可以在前边写上

import sys
reload(sys)
sys.setdefaultencoding('utf8')

把 str 编码由 ascii 改为 utf8 (或 gb18030)

(2)、python3 区分了 unicode str 和 byte arrary,并且默认编码不再是 ascii

参考:http://vososo.com/vo/558

四、其他错误

Django POST请求错误forbidden(403) CSRF verification failed. Request aborted

在 settings.py 中的MIDDLEWARE_CLASSES 设置下 添加

'django.middleware.csrf.CsrfResponseMiddleware',

重新 runserver.   OK

重点参考:http://www.gaodaima.com/feng88724/article/details/7221449

我用的是django1.2.3,当使用session时,也会像上面出错,这时把下面注释掉即可:

# 'django.middleware.csrf.CsrfViewMiddleware', #这段代码理应注释掉,在使用session的时候

login:login() takes exactly 1 argument (2 given)

这在登录视图函数的时候特别常见,原因就是函数login与login模块的名字冲突,如登录url这样写:

(r'^account/login/$', 'login'),  #登录

 那么,对应的视图函数如下:

def login(request):
    if request.method == "POST":
        try:
            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)
                    return HttpResponse('ok')
                else:
                    return HttpResponse('error')
        except Exception,e:
            log.error("login:%s" % str(e))
    return render_to_response('account/login.html')

 当然如果这样写,不要忘记导入:

from django.contrib.auth import authenticate, login

这样就坏事了,因为出现了两个login.这就导致了上面的问题,解决办法有两个,

修改login视图函数的名称和对应的url中。如webLogin

导入设置:from ..login as _login 这样也行,别忘了都要改过来。

无法跳转

如,我想登录。然后登录成功后跳转到主页,如上:把上面代码改写成这样

.....
if user.is_active:
    login(request,user)
    return HttpResponseRedirect('/')
....

但是却没有实现跳转,如下:

这里并不是跳转写错了,而是没有注意到我这个登录界面是ajax POST形式的,代码如下:

//登录

function _submit(){
    var username = $("input[name='username']").val();
    var password = $("input[name='password']").val();
    if (username == ""){
        art.dialog({content: '用户名不能为空',time :1.5}); 
    }else if(password == ""){
        art.dialog({content: '密码不能为空',time :1.5});  
    }else{
    $.post('/account/login/',{'username':username,'password':password},function(data){
                if (data =='error'){
                    art.dialog({content: '用户名或密码错误',time :1.5});    
                }
            }); 
    }
}

Query.post( url, [data], [callback], [type] ) :

如果返回,它只返回一个字符串。所以并不能在后台跳转。

解决方法是: return HttpResponse('ok'),通过接受返回的Ok 来在前台实现跳转。

来源:搞代码网:原文地址:https://www.gaodaima.com


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Django常见出错解决方案汇总

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址