2015-09-21 84 views
3

我有一個使用for循環顯示數據的html表單。如何將鏈接中的變量傳遞給django視圖

<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視圖,因此可以獲取包含參數的數據並將其顯示在下一頁上。怎麼做?

我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

什麼是SKU與......有關?模型領域?您可以添加一個參數到您的網址,這是django教程顯示如何做的第一件事情之一.. – Sayse

+0

我讀過它,但無法弄清楚如何實現, –

+0

你應該顯示你已經嘗試過 – Sayse

回答

5

首先,它不建議當您添加URL使用HTML名稱。而不必

href="/product/product.html" 

,你可能只是有這樣的事情

所以在你的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> 
     ..... 

,並在您的視圖即; at產品

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

它可以通過2種方式完成,使用get和using URL參數。

使用Get是簡單,靈活,但會導致難看的網址:

  <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參數是更好的方法,它也比獲取參數更幹(尤其是當不使用{% 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> 
相關問題