Django Python 视图文件中的语法错误
我最近在使用Django开发我的网页应用时遇到了一个问题:
SyntaxError at /
invalid syntax (views.py, line 98)
Request Method: GET
Request URL: http://craft.irisa.fr/
Django Version: 1.6.5
Exception Type: SyntaxError
Exception Value:
invalid syntax (views.py, line 98)
Exception Location: /usr/lib/python3.2/importlib/_bootstrap.py in get_code, line 413
Python Executable: /root/CRAFT/trunk/sources/env/bin/python
Python Version: 3.2.3
这是我views.py文件中的一部分代码:
def login_view(request):
""" Logs a user into the application """
# Redirect if user is already connected
if request.user.is_authenticated():
return HttpResponseRedirect('/')
if request.method == 'POST':
# Get the values from the sent form
login_form = AuthenticationForm(data=request.POST)
# Log the user in if the form is valid
if login_form.is_valid():
login(request, login_form.get_user())
#line 98 is here :
messages.add_message(request, messages.INFO, u'Welcome back '+ request.user.username +'!')
next = request.POST.get('next','/')
return HttpResponseRedirect(next)
else:
next = request.GET.get('next','/')
# Create the form
login_form = AuthenticationForm()
# Display the page
return render(request, 'taskHandler/login.html', locals())
你可以看到这一行没有语法错误,我的代码也能正常运行,我测试过了。
不过我做了一个新的改变:我把Django的数据库从sqlite3换成了postgresql。
这些问题是在我做了这些修改后出现的,所以我想弄明白为什么Python会报这样的错误!我尝试通过manage.py shell往我的数据库里添加数据,结果没有问题!
谢谢你的帮助!
Erwann
编辑:完整的错误追踪信息
环境:
Request Method: GET
Request URL: http://craft.irisa.fr/
Django Version: 1.6.5
Python Version: 3.2.3
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'taskHandler',
'widget_tweaks',
'south')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "/root/CRAFT/trunk/sources/env/lib/python3.2/site-packages/django/core/handlers/base.py" in get_response
99. resolver_match = resolver.resolve(request.path_info)
File "/root/CRAFT/trunk/sources/env/lib/python3.2/site-packages/django/core/urlresolvers.py" in resolve
339. sub_match = pattern.resolve(new_path)
File "/root/CRAFT/trunk/sources/env/lib/python3.2/site-packages/django/core/urlresolvers.py" in resolve
339. sub_match = pattern.resolve(new_path)
File "/root/CRAFT/trunk/sources/env/lib/python3.2/site-packages/django/core/urlresolvers.py" in resolve
223. return ResolverMatch(self.callback, args, kwargs, self.name)
File "/root/CRAFT/trunk/sources/env/lib/python3.2/site-packages/django/core/urlresolvers.py" in callback
230. self._callback = get_callable(self._callback_str)
File "/root/CRAFT/trunk/sources/env/lib/python3.2/site-packages/django/utils/functional.py" in wrapper
32. result = func(*args)
File "/root/CRAFT/trunk/sources/env/lib/python3.2/site-packages/django/core/urlresolvers.py" in get_callable
97. mod = import_module(mod_name)
File "/usr/lib/python3.2/importlib/__init__.py" in import_module
124. return _bootstrap._gcd_import(name[level:], package, level)
File "/usr/lib/python3.2/importlib/_bootstrap.py" in _gcd_import
821. loader.load_module(name)
File "/usr/lib/python3.2/importlib/_bootstrap.py" in load_module
436. return self._load_module(fullname)
File "/usr/lib/python3.2/importlib/_bootstrap.py" in decorated
141. return fxn(self, module, *args, **kwargs)
File "/usr/lib/python3.2/importlib/_bootstrap.py" in _load_module
330. code_object = self.get_code(name)
File "/usr/lib/python3.2/importlib/_bootstrap.py" in get_code
413. dont_inherit=True)
Exception Type: SyntaxError at /
Exception Value: invalid syntax (views.py, line 98)
2 个回答
0
在Python 2.x中,u是一个用来表示编码的字符。
而在Python 3.2中,你可以直接使用str()函数,或者干脆去掉u这个字符。
1
这个问题是因为Python的版本造成的。
在Python 3.2中,字符串前面加的'u'这个编码标识是不能使用的!