Задать вопрос
@Animkim
Питон вокруг меня

Не могу построить правильный urls, где я свернул не туда?

urlpatterns = patterns('',
    url(r'^([\D\-]+)/$', views.category),
    url(r'^[\w\-]+/(?P<slug>[\w\-]+)/$', views.product_page),
    )

views
def category(request, slug):
    slug = slug.split('/')[-1]
    requested_category = get_object_or_404(Category, slug=slug)

def product_page(request, slug):
    item = get_object_or_404(Product, slug=slug)

Сейчас как видно url категорий от url продукта я отличаю очень странно, в категории не может быть цифр (на самом деле может), а в товаре обязательно цифра есть.
url категорий до трех уровней:
/кат1/кат2/кат3/товар
/кат1/кат2/товар
/кат1/товар
Так вот сам вопрос, где я свернул не туда и как выйти к свету?
  • Вопрос задан
  • 256 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 2
kentuck1213
@kentuck1213
Example:
url(r'^new/(?P[\w-]+)$', news.new, name="new"),
Ответ написан
sim3x
@sim3x
0. Отказаться от такого стиля урлов
1. Сделать два уровня Каталог1/Товар1
2. Сделать префикс Каталог_название-каталога1/Товар_название-товара1
3. Сделать суффикс название-каталога1_каталог/название-товара1_товар
4. Создавать ЧПУ, но плевать на слаг и ориентироваться на id
каталог-бла-бла/товара-бла-бла_id123
каталог-бла-бла_id123
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
tema_sun
@tema_sun
Когда-то решал такую задачу, но решения через urls.py так и не придумал.
В urlpatterns у меня было что-то типа url(r'^catalog/.*\/$', catalog_view)
И уже во вьюшке я делал path = re.split('/', PATH_INFO).
Далее логика была такая:
1) делал запрос к товарам по path[-1], при наличие результата фильтровал по оставшимся частям пути.
2) если ничего не найдено, то предполагал, что перед нами категория и совершал соответствующие действия.
3) если и категорий нет, то 404.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы