2011-05-27 12 views
7

Aquí está mi código en url.py:Django 1.3 parámetros de paso para filtrar la lista de vista genérico basado en clases en url.py

(r'^tag/(?P<tag>\w+)/$', 
    ListView.as_view(
     model=List, 
     context_object_name='some_list', 
     queryset=List.objects.filter(tag__name__in=[tag_name]), 
     template_name='some_list.html')) 

me gustaría pasar a (?P<tag>\w+) "tag_name" filtro, pero no sé cómo hacerlo

¿Cómo puedo pasar varias etiquetas? De esta manera:

http://www.mysite.com/tag/tag1+tag2+tag3 

url.py debe recibir "tag1+tag2+tag3", dividirlo en "tag1", "tag2" y "tag3", y luego ponerlos en "tag__name__in":

queryset=List.objects.filter(tag__name__in=[tag1, tag2, tag3]) 

Básicamente, estoy confundido por la vista genérica basada en clases. ¿Alguna idea?

Respuesta

18

Puede sobrescribir el método get_queryset de la vista y construir un conjunto de consulta con sus resultados, por ejemplo.

from django.views.generic.list import ListView 

class MyList(ListView): 
    def get_queryset(self): 
     tag_list = self.kwargs['tags'].split('+') 
     return List.objects.filter(tag__name__in=tag_list) 

# urls.py 
... 
url(r'tag/(?<tags>[\w\+]+)/', MyList.as_view()) 
+0

¡Funcionó! ¡¡¡Guau!!! ¡Gracias! – devfeng

Cuestiones relacionadas