urlpatterns не обновляются после вставки БД? - PullRequest
0 голосов
/ 01 ноября 2011

У меня есть HTML-форма, которая вставляет данные в одну таблицу с именем srv.

Я создал urls.py таким образом, чтобы захватывать каждую вставку:

for item in srv.objects.all():
    linkSrv = item.loc.lower() + '/srv/' + item.subctg.lower() + '/' + item.title.lower()
    urlpatterns += patterns('',
    url(r'^' + linkSrv + '/$', 'beta.views.queryFromIndexDeep'),
)

После выполнения одной вставки, например, loc = 'loc', subctg = 'subctg' и title = 'title' если я укажу свой браузер на 127.0.0.1: 8000 / loc / srv / subctg / title / , я получу ошибку http404 (не соответствует URL)

Если я «принудительно сохраню» urls.py (vim urls.py затем: x!) - после вставки loc, subct, title - тогда я смогу успешно получить доступ к 127.0.0.1:8000/loc/srv/subctg / название /

Кто-нибудь может пролить свет? Похоже, что urlpatterns нужно «обновлять» каждый раз, когда строка вставляется в таблицу srv.

Ответы [ 2 ]

2 голосов
/ 01 ноября 2011

Вы должны просто использовать что-то вроде этого:

urlpatterns += patterns('',
    url(r'^(?P<loc>\w+)/(?P<subctg>\w+)/(?P<title>\w+)/$',
                         'beta.views.queryFromIndexDeep'),
)

Использование регулярных выражений для соответствия вашему виду намного проще и рекомендуется. По вашему мнению, вышеприведенное будет соответствовать функции, определенной как beta.views.queryFromIndexDeep(request, loc, subctg, title), откуда вы можете продолжать работать с этими переменными для извлечения соответствующих данных из ваших определенных моделей.

0 голосов
/ 01 ноября 2011

добавить слаг-поле (уникальное) в вашу модель srv и добавить метод в модель

def get_absolute_url(self):
    return /yourapp/%s/ % self.slug

Тогда в URL используйте шаблон, соответствующий этому

url(r'^srv/(?P<slug>[-\w]+)/$', yourgenericview),

Загляните в отрывок из django slugify http://djangosnippets.org/snippets/690/

...