在我的开发系统(mac os x)中,我在urls.py文件的末尾添加了以下行:
if re.match('darwin',sys.platform):
# serving media files using the development server
urlpatterns += patterns('',(r'^site_media/(?P<path>.*)$',
'django.views.static.serve',
{'document_root': '/Users/henri/sites_django/wmsproject/wmssite/site_media'}),)
为了提供媒体文件。
一切都按预期进行,差不多......
我在调用视图之前包含了一个中间件类来拦截处理。在这个中间件中,我定义了一个process_view函数。事情没有按预期工作,所以我插入了一个'assert False'作为这个函数的第一行,如下所示:
def process_view(self, request, view_func, view_args, view_kwargs):
assert False
当我在浏览器中输入此网址时:
http://localhost:8000/site_media/images/logo_wms_web.gif
令我惊讶的是,我很清楚地看到以下信息:
self <wmssite.middleware.LanguageMiddleware.LanguageRedirect instance at 0x10117fe60>
view_args {}
view_func <function serve at 0x101281578>
view_kwargs {'document_root': '/Users/henri/sites_django/wmsproject/wmssite/site_media', 'path': u'images/logo_wms_web.gif'}
我在转储中看到的参数正是您在我刚刚显示的urls.py文件中看到的参数。 URL调度在调用视图之前发生(显然),但我也认为在调用视图之前,调用了调用后调用的中间件。但这似乎是在调度URL之前调用中间件。
所以我似乎弄错了。有人可以解释何时调用与调度URL相关的中间件?
答案 0 :(得分:2)
回溯中的哪些内容可以让您得出在调度URL之前调用中间件的结论?相反,很明显它在之后被调用,并且在调用视图之前,因为它显然具有要发送到的视图的名称 - serve
,换句话说django.views.static.serve
在你的urls.py中定义。