【问题标题】:how to Pass variable in link to the django view如何在链接中传递变量到 django 视图
【发布时间】:2015-12-17 20:47:03
【问题描述】:

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

<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 循环在表中打印数据,并在表的第一个列中带有链接。
该链接指向一个新页面,我希望在其中显示一些数据。
现在显示的数据是从 mongodb 数据库动态生成的。我希望当我单击链接时,它将值作为参数传递给 django 视图,以便可以获取包含参数的数据并将其显示在下一页上。该怎么做?

我的意见.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')

【问题讨论】:

  • sku 与什么有关?模型字段?您可以向您的 url 添加一个参数,这是 django 教程展示如何做的第一件事..
  • 我读过它,但不知道如何实现它
  • 你应该展示你尝试过的东西

标签: python html django mongodb


【解决方案1】:

首先,添加 url 时不建议使用 html 名称。而不是拥有

href="/product/product.html"

你可以有类似的东西

href="/product/"

所以在您的 urls.py 中,您应该将其定义如下

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

其中“产品”是处理该请求的相应视图。

现在如果你想从 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')

【讨论】:

    【解决方案2】:

    可以通过两种方式完成,使用get和使用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 参数更 DRY(尤其是当不使用 {% 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')
    

    并在您的模板中创建 URL:

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

    【讨论】:

      猜你喜欢
      • 2021-12-20
      • 2022-01-15
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 2021-09-13
      • 2015-05-23
      相关资源
      最近更新 更多