Две переменные в URL Джанго - PullRequest
       1

Две переменные в URL Джанго

2 голосов
/ 21 февраля 2011

models.py

class Category(models.Model):
    name = models.CharField(max_length=200)
    slug = models.SlugField()
    parent = models.ForeignKey('self', blank=True, null=True, related_name='child')

views.py

def category(request, parent, child):
    c = Category.objects.filter(parent__isnull=True)
    s = Category.objects.filter(parent__isnull=False)

    if child == False:
        p = Product.objects.filter(category__name__exact=parent)
        return render_to_response('all_products.html', {'current_category': get_object_or_404(Category, name=parent), 'c':c, 'p':p, 's':s })
    else:
        p = Product.objects.filter(category__name__exact=child)
        return render_to_response('all_products.html', {'current_category': get_object_or_404(Category, parent__name=parent, slug=child), 'c':c, 'p':p, 's':s })

urls.py

url(r'^products/(?P<parent>[-\w]+)/(?P<child>[-\w]+)/$', 'products.views.category'),
url(r'^products/(?P<parent>[-\w]+)/$', 'products.views.category', { 'child' : False }),

Я создаю представление для простого двухуровневого приложения категории. Вышеуказанное работает, я просто не думаю, что оно очень чистое, какие-нибудь советы по его улучшению?

1 Ответ

2 голосов
/ 06 апреля 2011

Часто я делаю следующее:

models.py: Ваше значение "related_name" должно быть множественным.«child» затрудняет понимание того, что происходит, в то время как «child_set» дает понять, что их может быть больше одного.ребенок

def category(request, parent, child=None):
    parent = Category.objects.get(name=parent)
    if child:
        child = parent.child_set.get(name=child)

    return render_to_response('all_products.html', {
        'p': Product.objects.all(),
        'c': parent,
        's': child,
        'current_category': child or parent,
    })

urls.py: вложите свои шаблоны, чтобы использовать принцип СУХОГО

view_prefix = 'products.views'
url_patterns = patterns('',
    (r'^products/(?P<parent>[^/]+)/', include(patterns(view_prefix,
        url(r'^$', 'category'),
        url(r'^(?P<child>[^/]+)/$', 'category'),
    ))),
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...