Django Python 视图文件中的语法错误

1 投票
2 回答
1337 浏览
提问于 2025-04-18 11:18

我最近在使用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'这个编码标识是不能使用的!

撰写回答