当用户在django中填写表单时,如何使用友好方式重定向url

时间:2011-12-07 10:17:29

标签: django forms url

我在模板中使用表单,我想在用户填写表单时重定向友好的URL 我在stackoverflow中搜索了很多问题,我认为我的问题就像这个问题:Django form redirect, 但我无法理解模板标签,所以我无法解决我的问题。

我写下表格:

<form  method="GET" action="/stock/search">
  search:<input class="search" name="search" type="text" value="" id="serach" >
  <input type="submit" value="Go"/>
</form>

并写下网址:

url(r'^(?P<number>\w+)/$', 'stock.views.stocknumber'),
url(r'^search/$', 'stock.views.search'),

和观点:

def stocknumber(request, number):
    """
    stock info
    """
    stock = Stock.objects.filter(number="%s"%number)
    stock_number = Stock.objects.filter(number="%s"%number)
    stock_reportinfo = Reportinfo.objects.filter(number="%s"%number)
    stock_blockinfo = Blockinfo.objects.filter(number="%s"%number)
    stock_stockinfo = Stockinfo.objects.filter(number="%s"%number)
    data = Stockhq.objects.filter(number="%s"%number).values('timeStamps','openData','highData','lowData', 'closeData', 'volData').reverse()
    datalist=[ ]
    for item in data:
        d =[item['timeStamps'].toordinal(),item['openData'],item['highData'],item['lowData'],item['closeData'],item['volData']]       
        datalist.append(d)

    hisdata = datalist

    return render_to_response(
        'stock/stock.html', 
        {"stock_number": stock_number,
         "stock_reportinfo": stock_reportinfo,
         "stock_blockinfo": stock_blockinfo,
         "stock_stockinfo": stock_stockinfo,
         "hisdata":simplejson.dumps(hisdata) ,
        }, 
        context_instance=RequestContext(request))

def search(request):
        return HttpResponseRedirect('/stock/%s/'%request.GET['search'])

现在我希望用户输入库存号并重新输入友好的网址,例如:http://..../stock/YHOO 并且这个网址是获取股票信息来呈现模板,这个想法是对的吗?

如果是,那么正确的代码是什么?

1 个答案:

答案 0 :(得分:0)

如果我没有正确理解,我认为这个问题与你的问题非常相似。因为那个已经预先确定了表单的操作,重定向的URL似乎并不依赖于用户输入。所以我不完全确定你的问题是什么。

您是否正在实施简单搜索,当用户输入股票编号时(我假设您考虑&#34; YHOO&#34;数字?是&#34;数字&# 34;输入类似&#34; YHOO&#34;或者它实际上是一个数字?),带有数字的股票(所以&#34; YHOO&#34;股票)在新页面上显示其所有信息使用URL&#34; http://.../stock/YHOO"?

无论如何,这里有一些观察。

stock = Stock.objects.filter(number="%s"%number)
stock_number = Stock.objects.filter(number="%s"%number)

当你没有使用第一个时,你有两个原因吗?另外,数字是唯一的吗?如果是这样,你可以只做Stock.objects.get(number = number),因为:

  1. 你会使用&#34;得到&#34;而不是&#34;过滤&#34;因为你期待一个 单一记录以匹配。
  2. Number是一个字符串 传入,所以你不需要做&#34;%s&#34; %number。
  3. 您也可以尝试以下方法,而不是使用实际的网址,以使其更像Django。

    from django.core.urlresolvers import reverse
    ...
    def search(request):
        number = request.GET['search']
        return HttpResponseRedirect(reverse('stock.views.stocknumber', args=(number,)))