URL хранятся в базе данных для сайта Django - PullRequest
0 голосов
/ 14 октября 2009

Я создал несколько сайтов Django, но до сих пор я отображал отдельные представления и URL-адреса в urls.py.

Сейчас я попытался создать небольшую пользовательскую CMS, но у меня возникли проблемы с URL-адресами. У меня есть таблица базы данных (SQLite3), которая содержит код для страниц, такой как столбец для заголовка, один для правого меню, один для содержимого .... и так далее, и так далее. У меня также есть столбец для URL. Как заставить Django вызывать информацию в таблице базы данных с URL-адреса, хранящегося в столбце, вместо необходимости кодировать представление и URL-адрес для каждой страницы (что явно противоречит цели CMS)?

Если кто-то может просто указать мне на правую часть документа или на сайт, который объясняет это, это очень поможет.

Спасибо всем.

Ответы [ 2 ]

5 голосов
/ 14 октября 2009

Вы не должны делать это в виде плоской страницы

Для моделей, которые должны быть адресуемыми, я делаю это:

В urls.py у меня есть отображение URL, как

  url(r'(?P<slug>[a-z1-3_]{1,})/$','cms.views.category_view', name="category-view")

в этом случае регулярное выражение (?P<slug>[a-z1-3_]{1,}) вернет переменную с именем slug и отправит ее на мой взгляд cms.views.category_view. В этом представлении я запрашиваю так:

@render_to('category.html')
def category_view(request, slug):
    return {'cat':Category.objects.get(slug=slug)}

(Примечание: я использую раздражающий декоратор render_to - он такой же, как render_to_response, только короче)

Редактировать Это должно быть описано в учебнике . Здесь вы найдете url-конфигурацию и диспетчеризацию в каждой детали. Djangobook также покрывает это. И проверьте модуль регулярных выражений питонов.

Конечно, вы можете использовать этот код.

1 голос
/ 14 октября 2009

Ваш вопрос немного искажен, но я думаю, что вы просите что-то похожее на то, как django.contrib.flatpages справляется с этим. В основном он использует промежуточное программное обеспечение, чтобы перехватить ошибку 404, а затем проверяет, есть ли на какой-либо из плоских страниц поле URL, которое соответствует.

Мы сделали это на одном сайте, где все URL были сделаны «дружественными для поисковых систем». Мы переопределили метод save (), спрятали заголовок в this_is_the_title.html (или где-либо еще), а затем сохранили его в отдельной таблице с URL => object class / id mapping.ng (это означает, что он перечислен перед плоских страниц в списке промежуточного программного обеспечения).

...