在我的开发系统(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 调度之前调用了中间件。
所以看来我弄错了。有人可以解释一下何时调用与 URL 调度相关的中间件吗?