2013-07-23 4 views
0

Мой URL регулярное выражение r'^admin.*/static/admin/(?P<path>.*)$', теперь он может соответствовать admin/static/admin/css/base.css или admin/123/static/admin/js/actions.js, но я хочу соответствовать URL как admin/blog/post/static/static/admin/js/actions.js (теперь это не соответствует)Регулярные выражения в Джанго URL

Как мог я сделать это?

Спасибо за комментарии каждого.

Моя проблема настроить статический путь URL-адреса в Django, чтобы сохранить свой CSS/JS файл, как этот url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT,}), settings.STATIC_ROOT является os.path.join(os.path.dirname(os.path.abspath(__file__)), 'static')

Но когда я получить доступ к интерфейсу администратора, все CSS/JS файлы отсутствуют , потому что admin css хранит файл в django\contrib\admin\static\admin, а его url в html-файле - «static/admin/css/base.css». нет этого файла в моем статическом пути, который я установил в настройках.

Мое решение установлено другим URL-адресом, например r'^admin.*/static/admin/(?P<path>.*)$', и установить корень документа в путь статического файла администратора django. но, как я уже упоминал, когда я иду на главную страницу администратора, все в порядке, мой, когда я углубляюсь, как страница «добавить пользователя», файл css по-прежнему отсутствует.

Я также нашел решение изменить мой url regular на r'.*/static/admin/(?P<path>.*)$', это нормально для всего, но есть ли лучшее решение?

После того как я запустил collectstatic, по моему статическому пути я могу найти папку администратора и файлы css/js. то я устанавливаю свой URL-адрес для url (r '^ admin/static/(? P. *) $', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),, it работает на главной странице администратора, но когда я обращаюсь к http://localhost/admin/sites/site/static/static/admin/js/admin/RelatedObje‌​ctLookups.js, он все равно не работает, как я могу написать свой URL-адрес?

+2

В чем проблема, которую вы пытаетесь решить? –

+1

Зачем это, вы можете вводить статические файлы в свои веб-шаблоны? –

+0

Я не уверен, почему это не соответствует, я просто избежал косых черт, удалил имя группы захвата, и это работает для меня на http://www.rubular.com/r/DlxE1mejvL –

ответ

0

картина соответствует просто отлично:

>>> import re 
>>> p = re.compile(r'^admin.*/static/admin/(?P<path>.*)$') 
>>> p.match("admin/blog/post/static/static/admin/js/actions.js").groups() 
('js/actions.js',) 

так не понятно, почему он не работает для вас. Вы дважды проверили, что проблемный URL-адрес не соответствует другому, более раннему регулярному выражению?

РЕДАКТИРОВАТЬ: На основании вышеприведенных обновлений может быть установлено, что STATIC_URL неправильно установлен (пустая строка, возможно?). Он должен указать, где статические файлы обслуживаются (URL, а не каталог) и должны заканчиваться косой чертой. См. Settings: STATIC_URL.

(И как сноска, вы должны быть немного осторожны с тем, чтобы ваши регулярные выражения URL делали слишком много, вы еще не с этим, но статья ReDoS Википедии хорошо читать, прежде чем вы выйдете за пределы того, re делаю здесь.)

Смежные вопросы