我有一个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')
答案 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>