我正在编写我的网站代码,并使用manage.py runserver
命令测试Django的内置web服务器。现在我遇到了一个非常奇怪的问题:服务器似乎在第一次页面加载时使用了当前版本的views.py
,但是随后的所有刷新都会给我一个服务器错误,因为服务器似乎使用的是views.py
的旧版本,但是所有其他文件的当前版本,这会导致错误-特别是URL解析器错误,因为我将一些代码从views.py
中的硬编码路径改为使用URL解析程序,如果URL解析程序接收到一个路径(来自旧的views.py
),而它需要一个视图名(我把它放在新的views.py
)中,这当然不起作用。在
我已经删除了django项目目录中的所有.pyc
文件,并重新启动了机器,但没有成功。问题依然存在。在
我在python3.4.2上使用django1.7.6。在
以下是当前的views.py
(这不是真的有意义,它只是为了测试):
from mezgrman.utils import NavigationTemplateResponse
NAV_DATA = {
'app_root': 'index',
'app_title': "Item Manager",
'navbar': [
("Add Item", 'index'),
],
'page_title': "Item Manager",
}
def index(request):
return NavigationTemplateResponse(request, "design_test/index.html", NAV_DATA)
NavigationTemplateResponse
是TemplateResponse
的子类:
Django服务器回溯显式地证明它使用的是views.py
的旧版本,这些是出错时的局部变量(无WSGIRequest
),其中{views.py
中的相同:
content_type None
template 'design_test/index.html'
url_name 'design_test.views.index'
status None
self <mezgrman.utils.NavigationTemplateResponse object at 0x7f395f8d15f8>
app_name 'design_test'
__class__ <class 'mezgrman.utils.NavigationTemplateResponse'>
context {}
view_prefix 'design_test.views.'
current_app None
nav_data {
'app_root': '/',
'app_title': 'Item Manager',
'navbar': [('Add Item', '/')],
'page_title': 'Item Manager'
}
在我看来,这是Django的一个bug,但我想知道这种奇怪行为是否还有其他原因。任何帮助都将不胜感激。在
这不是bug,而且这不是
views.py
的旧代码。您只需在视图内的NAV_data中覆盖数据。在启动服务器的第一个请求中,NAV_DATA有它的初始值,但在该请求中,您将用反向的url覆盖一些值。在重新加载dev服务器之前,这种更改在请求之间持续存在。在解决方案1:练习你的口述:
解决方案2:更改逻辑,将反向URL存储在其他变量中
解决方案3:更改逻辑,使其在URL已反转时表现不同。该解决方案是线程安全的!在
相关问题 更多 >
编程相关推荐