简体   繁体   English

Django视图和模板链接

[英]Django views and templates links

My index.html template in Django has the following content: 我在Django中的index.html模板具有以下内容:

<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: 因此链接到相同的模板,但(取决于点击的链接)我想写我的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? 我可以获取上一页中点击的链接的值吗?

It i better to pass the value in the url instead of url parameter: 我最好传递url中的值而不是url参数:

<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'),

Pass the value as GET parameter: 将值作为GET参数传递:

<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)

You need to capture quantities in your url configuration. 您需要在网址配置中捕获数量。 https://docs.djangoproject.com/en/1.7/topics/http/urls/ 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: 这比传递GET参数更好,因为你有一个链接,像这样的链接http://example.org/quantities/4/看起来更好,在Django它是一个约定:

<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: 所以你的urls.py看起来像:

from django.conf.urls import patterns, url
from . import views

urlpatterns = patterns('',
    url(r'^quantities/(\d+)/$', views.quantities), )

views.py from another answer views.py来自另一个答案

def quantities(request, value):
    if value in ('2', '3', '4'):
        levels = Model_1.objects.filter(createria=int(value))
    else:
        levels = Model_1.objects.all()
    ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM