Django: настройка URL во время выполнения - PullRequest
4 голосов
/ 22 сентября 2009

Если есть безболезненный способ модификации urlconf во время выполнения? например на основании записей базы данных?

Раствор брутфорса:

r('^(.*)/', handmade_router_function)

слишком жесток для меня:)

Заранее спасибо!

UPD: Я понимаю, что могу напрямую изменять urlpatterns из своего кода, но это требует много ручного кодирования (пользовательские действия по сохранению admin, обработчики удаления и т. Д.) и я хочу выяснить, есть ли готовое к использованию приложение / библиотека:)

Ответы [ 3 ]

2 голосов
/ 22 сентября 2009

В Django есть приложение contrib, которое уже делает это, оно называется FlatPages. Это работает путем регистрации промежуточного программного обеспечения. Когда запрашивается страница, если она не найдена, она выбрасывает 404, который перехватывается промежуточным ПО. Промежуточное программное обеспечение просматривает страницу в базе данных, если найдено, что оно обслуживает страницу, а если нет, выдает 404.

0 голосов
/ 22 сентября 2009

Как-то так работает. Вы будете повторять что-то другое, например, экземпляры модели, как вы упомянули, но предпосылка та же:

for path in ["foo", "bar"]:
    urlpatterns += patterns("myapp.views", url(r"^%s/$" % path, "index", {}, name=path))

Я поместил этот код в свой urls.py. Это приводит к следующему сопоставлению с представлением:

http://127.0.0.1:8000/foo/
http://127.0.0.1:8000/bar/

Некоторые вещи на заметку:

  1. Я не уверен, каковы ваши взгляды, так что это просто вызывает представление с именем index.
  2. Я называю URL-адреса после их соответствующего path аргумента; Вы можете назвать их по-другому.
0 голосов
/ 22 сентября 2009

Вы пытались изменить переменную "urlpatterns" во время выполнения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...