如何将链接中的变量传递给django视图

时间:2015-09-21 08:15:07

标签: python html django mongodb

我有一个html表单,它使用for循环显示数据。

<tbody id="table">
    {% for sku, lid, stk, mrp, sp, stts in product_data %}
    <tr>
        <td>
            <a class="btn-link" href="/product/product.html" value="{{sku}}">{{sku}}</a>
        </td>
        <td>{{lid}}</td>
        .....

此代码使用for循环在表格中打印数据,并在表格的第一个colyumn中显示链接 该链接指向一个新页面,我希望显示一些数据 现在显示的数据是从mongodb数据库动态生成的。我想当我点击链接时它将值作为参数传递给django视图,因此可以获取包含参数的数据并在下一页显示它。怎么做?

我的views.py:

from django.shortcuts import render
from django.http import HttpResponse
from inventory.models import GetProductData

def inventory(request):
    pd = GetProductData().skuData()
    sku = pd[0]
    listing_id = pd[1]
    stock_count = pd[2]
    mrp = pd[3]
    status = pd[5]
    selling_price = pd[4]

    product_data = zip(sku, listing_id, stock_count, mrp, selling_price, status)
    context_dict = {'product_data':product_data}
    return render(request, 'inventory/inventory.html', context_dict)

def product(request):
    return render(request, 'inventory/product.html')

2 个答案:

答案 0 :(得分:6)

首先,添加网址时不建议使用html名称。而不是

href="/product/product.html"

你可能只有像

这样的东西
href="/product/"

所以在你的urls.py中你应该把它定义如下

url(r'^product/$', product),

其中&#39;产品&#39;是处理该请求的相应视图。

现在,如果你想从html发送一些参数到django

将模板渲染如下

<tbody id="table">
    {% for sku, lid, stk, mrp, sp, stts in product_data %}
    <tr>
        <td>
            <a class="btn-link" href="/product/?sku={{ sku }}">{{sku}}</a>
        </td>
        <td>{{lid}}</td>
        .....

并且在您看来,即;在产品

def product(request):
    if request.method=='GET':
        sku = request.GET.get('sku')
        if not sku:
            return render(request, 'inventory/product.html')
        else:
            # now you have the value of sku
            # so you can continue with the rest
            return render(request, 'some_other.html')

答案 1 :(得分:6)

可以使用get和using URL参数以两种方式完成。

使用get简单而灵活,但会导致丑陋的URL:

            <a class="btn-link" href="/product/product.html?parameter={{ your_parameter_here }}" value="{{sku}}">{{sku}}</a>

在内部视图中,您可以像这样访问它:

def product(request):
    your_parameter = request.GET['parameter']
    return render(request, 'inventory/product.html')

使用url参数是更好的方法,它也比获取参数更干燥(特别是当不使用带有get的{% url %}标记时)。

您的urls.py应如下所示:

urlpatterns = [
    url(r'^product/product-(?P<parameter>[\w-]+).html', 'views.product', name="product"),
]

在视图中获取该参数:

def product(request, parameter): # it's just passed as kwarg into view
    return render(request, 'inventory/product.html')

并在模板中创建网址:

            <a class="btn-link" href="{% url "product" parameter=your_parameter_here %}" value="{{sku}}">{{sku}}</a>