Django开发服务器似乎正在使用旧版本的python源代码fi

2024-10-03 04:28:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写我的网站代码,并使用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)

NavigationTemplateResponseTemplateResponse的子类:

^{pr2}$

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,但我想知道这种奇怪行为是否还有其他原因。任何帮助都将不胜感激。在


Tags: djangopytest服务器appurlindextitle
1条回答
网友
1楼 · 发布于 2024-10-03 04:28:09

这不是bug,而且这不是views.py的旧代码。您只需在视图内的NAV_data中覆盖数据。在启动服务器的第一个请求中,NAV_DATA有它的初始值,但在该请求中,您将用反向的url覆盖一些值。在重新加载dev服务器之前,这种更改在请求之间持续存在。在

解决方案1:练习你的口述:

class NavigationTemplateResponse(TemplateResponse):
    def __init__(self, request, template, nav_data, context = None, content_type = None, status = None, current_app = None):
        nav_data = nav_data.copy()

解决方案2:更改逻辑,将反向URL存储在其他变量中

解决方案3:更改逻辑,使其在URL已反转时表现不同。该解决方案是线程安全的!在

相关问题 更多 >