如何从django中的链接标记中获取数据?

时间:2016-06-08 05:35:31

标签: python django django-templates

在我的模型中,我有一个名为“Add_prod”的类,我创建了一些列,如书籍,作者,价格等。在模板中,我创建了两个超链接,用于按价格的升序/降序对数据进行排序。“名称“属性不支持锚标记。我也尝试使用id属性而不是名称,但仍然没有用。所以如何从锚标记中获取数据,以便按排序顺序排列产品。

Views.py,

def welcome_user(request):  
    if 'low_price' in request.GET:
        my_products = Add_prod.objects.all().order_by('price')
    elif 'high_price' in request.GET:
        my_products = Add_prod.objects.all().order_by('-price')
    else:
        my_products = Add_prod.objects.all()
    context = { "Products":my_products}

    #rest of code for other functionalities
    return render(request,"welcome-user.html",context)

我的模板文件

<form>
    <div style="text-align: right">
            <a name="low_price" href="{% url 'welcome_user' %}">Low Price</a>
            <a name="high_price" href="{% url 'welcome_user' %}">High Price</a>
    </div>
</form>

3 个答案:

答案 0 :(得分:1)

您需要在视图中附加您期望query parameters的网址:

<a name="low_price" href="{% url 'welcome_user' %}?low_price">Low Price</a>
<a name="high_price" href="{% url 'welcome_user' %}?high_price">High Price</a>

答案 1 :(得分:1)

有两种方式:

1作为@AKS回答。

2

def welcome_user(request,type):  
    if 'low_price' == type:
        my_products = Add_prod.objects.all().order_by('price')
    if 'high_price' == type:
        my_products = Add_prod.objects.all().order_by('-price')
    else:
        my_products = Add_prod.objects.all()
    context = { "Products":my_products}

    #rest of code for other functionalities


<form>
    <div style="text-align: right">
            <a name="low_price" href="{% url 'welcome_user' low_price %}">Low Price</a>
            <a name="high_price" href="{% url 'welcome_user' high_price%}">High Price</a>
    </div>
</form>

注意这样你实际访问过... / welcome_user / low_price /或... / welcome_user / hight_price /

所以,您需要将url patterns更改为此 url(r'^welcome_user/(?P<type>.+)/$','welcome_user')

我喜欢这种方式,因为你不需要照顾任何参数。换句话说,你不需要从GET获取或检查任何东西。如果它不是非法的,它就不会影响你的观点。

答案 2 :(得分:0)

@AKS建议对我不起作用。

但以下确实有效:

<a href="{% link %}?param">Text</a>

然后在视图中我指定:

if 'param' in request.GET:
    ...