Django views and templates links
Solution 1
It i better to pass the value in the url instead of url parameter:
<ul>
<li><a href="{% url 'quantities_all' %}>All</a></li>
<li><a href="{% url 'quantities' '2' %}>Subset1</a></li>
<li><a href="{% url 'quantities' '3' %}>Subset2</a></li>
<li><a href="{% url 'quantities' '4' %}>Subset3</a></li>
</ul>
You view will look like this:
def quantities(request, value=None):
if value in ('2', '3', '4'):
levels = Model_1.objects.filter(createria=int(value))
else:
levels = Model_1.objects.all()
...
And don't forget to change you url to:
url(r'^quantities/$', 'app.views.quantities', name='quantities_all'),
url(r'^quantities/(\d+)/$', 'app.views.quantities', name='quantities'),
Solution 2
You need to capture quantities in your url configuration. https://docs.djangoproject.com/en/1.7/topics/http/urls/
That's better than passing GET params because you have a link, and link like this http://example.org/quantities/4/
look's better and in Django it is a convention:
<ul>
<li><a href="{% url 'quantities' 1 %}">All</a></li>
<li><a href="{% url 'quantities' 2 %}">Subset1</a></li>
<li><a href="{% url 'quantities' 3 %}">Subset2</a></li>
<li><a href="{% url 'quantities' 4 %}">Subset3</a></li>
</ul>
So your urls.py could look like:
from django.conf.urls import patterns, url
from . import views
urlpatterns = patterns('',
url(r'^quantities/(\d+)/$', views.quantities), )
views.py from another answer
def quantities(request, value):
if value in ('2', '3', '4'):
levels = Model_1.objects.filter(createria=int(value))
else:
levels = Model_1.objects.all()
...
Solution 3
Pass the value as GET parameter:
<ul>
<li><a href="{% url 'quantities' %}?value=1">All</a></li>
<li><a href="{% url 'quantities' %}?value=2">Subset1</a></li>
<li><a href="{% url 'quantities' %}?value=3">Subset2</a></li>
<li><a href="{% url 'quantities' %}?value=4">Subset3</a></li>
</ul>
Get it in view:
def quantities(request):
value = request.GET.get('value', '1')
if value == "1":
levels = Model_1.objects.all()
elif value == "2":
levels = Model_1.objects.filter(createria=2)
elif value == "3":
levels = Model_1.objects.filter(createria=3)
elif value == "4":
levels = Model_1.objects.filter(createria=4)
wernerfeuer
Updated on June 04, 2022Comments
-
wernerfeuer almost 2 years
My index.html template in Django has the following content:
<ul> <li><a href="{% url 'quantities' %} value="1">All</a></li> <li><a href="{% url 'quantities' %} value="2">Subset1</a></li> <li><a href="{% url 'quantities' %} value="3">Subset2</a></li> <li><a href="{% url 'quantities' %} value="4">Subset3</a></li> </ul>
Thus linking to same template, but (depending on the link clicked) I would like to write if functions in my app/views.py:
def quantities(request): if value == "1": levels = Model_1.objects.all() elif value == "2": levels = Model_1.objects.filter(createria=2) elif value == "3": levels = Model_1.objects.filter(createria=3) elif value == "4": levels = Model_1.objects.filter(createria=4)
Can I get the value of the link clicked in the previous page?
-
Andrii Zarubin over 9 yearsYou should pass it as a GET parameter at least like
<li><a href="{% url 'quantities' %}?param=1>All</a></li>
. In this case you can build yourif
asif request.GET.get('param') == 1:
-