template - Campo de filtrado en DJango en la URL y en la vista
render django (1)
Digamos que tengo un modelo con 2 campos:
class Bands(models.Model):
id = models.IntegerField(db_column=''ID'', primary_key=True)
name = models.CharField(db_column=''NAME'')
type = models.CharField(db_column=''TYPE'')
...
Lo que quiero hacer es listar todos los datos de los campos con solo una plantilla. Por ejemplo:
{% block content %}
{{ field_name }}
<ul>
{% for band in bands %}
<li>{{ band }}</li>
{% endfor %}
</ul>
{% endblock %}
Entonces, ¿cómo debería hacer mi url?
url(r''^band/$'', views.band, name=''band'')
o
url(r''^band/(?P<band>/w+)/$'', views.band, name=''band'')
El enlace a esa página sería:
<a href="{% url ''band'' ''name'' %}">Name</a>
En la vista, tomo los valores así:
def band(request, field):
results = Results.objects.all()
names = [n.name for n in results]
types = [t.type for t in results]
if field == ''name'':
bands = names
else:
bands = types
return render(request, ''band.html'', {''bands'': bands, ''field_name'': field})
¿Es esta la manera correcta de hacer esto (en la vista y en la url)? Gracias por adelantado.
Bueno, lo más simple es usar DetailView .
from .models import Band
class BandDetailView(DetailView):
model = Band
Y en urls.py
algo así como:
from band.views import BandDetailView
url(r''^band/(?P<pk>/d+)/?$'', BandDetailView.as_view(), name=''band-detail'')
Y en la plantilla:
{% url ''band-detail'' pk=1 %}
Dicho esto, su modelo no tiene mucho sentido para mí, al igual que los bits de Led Zeppelin contra Deep Purple en la vista. ¿Puedes explicar tu proyecto / necesitar un poco más?