В моей системе развития (Mac OS X), я добавил следующие строки в конце моего файла urls.py:Джанго URL диспетчеризация и промежуточного
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'}),)
для того, чтобы служить медиа-файлов.
Все идет, как и ожидалось, ну почти ...
Я включил класс Middleware перехватить обработку прежде, чем мои взгляды называются. В этом промежуточном программном обеспечении я определил функцию process_view. Вещи, которые не работают, как ожидается, так что я вставлена «утверждать 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-адрес диспетчеризации происходит до того, как вызывается мнение (очевидно), но я также подумал, что Middleware называется AFTER url dispatching и перед вызовом views. Но это похоже на то, что Middleware вызывается перед отправкой URL.
Так что, похоже, я понял это неправильно. Может ли кто-нибудь объяснить, когда именно Middleware вызывается в отношении диспетчеризации URL?
Да, вы правы, однако он по-прежнему не объясняет, почему промежуточное программное обеспечение перехватывает запрос медиафайла. Одно дополнение. Я просто скопировал весь проект на виртуальную машину с Apache, mod_python. Когда я делаю то же самое в этой виртуальной машине, все ведет себя так, как ожидалось. Запрос на/site_media/..... и т. Д. Не перехватывается промежуточным программным обеспечением. Таким образом, кажется, что существует проблема только при использовании сервера разработки. – Henri
Я все еще не понимаю, почему вы думаете, что это проблема, или почему вы даже удивлены этим. Вы настроили представление для обслуживания носителя, перенаправленного вашим urls.py. Поэтому, конечно, он будет следовать за полным стекем Django. На вашем производственном оборудовании вы не используете этот url или view, поэтому он не проходит промежуточное программное обеспечение. Это именно то, чего вы должны ожидать. –
Хорошо, верьте или нет, ваши ответы были очень полезными. Вы были правы, это не проблема. Спасибо за ваши ответы. – Henri