【问题标题】:How can I redirect url with a frendly when user fill the form in django当用户在 django 中填写表单时,如何友好地重定向 url
【发布时间】:2011-12-07 10:17:28
【问题描述】:

我在模板中使用了一个表单,我想在用户填写表单时重定向一个友好的 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 而这个url是获取股票信息来渲染模板,这个想法对吗?

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

【问题讨论】:

  • 不要只是希望,试试吧!有什么问题吗?
  • 我正在尝试,但仍然感到困惑。
  • 你有什么困惑?如果一切正常,为什么要改变一些东西?

标签: django forms url


【解决方案1】:

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

您是否正在实施一个简单的搜索,即当用户输入股票编号时(我假设您认为“YHOO”是一个数字?“数字”是输入类似于“YHOO”还是实际上是一个数字?) , 带有编号的股票(即“YHOO”股票)及其所有信息都显示在 URL 为“http://.../stock/YHOO”的新页面上?

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

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

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

  1. 您应该使用“get”而不是“filter”,因为您希望 一条记录来匹配它。
  2. 数字已经是一个字符串,当 传入,所以你不需要做 "%s" % number。

您也可以尝试以下方法而不是使用实际的 URL,使其更像 Django。

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

【讨论】:

  • 谢谢,U-DON,也许我没有把我的问题描述清楚。我想通过用户填写的数字获取数据,并将模板呈现为 def Stocknumber 所做的,并使 url 友好的 url 像:http://..../stock/YHOO,而不是像 /?搜索=
猜你喜欢
  • 1970-01-01
  • 2015-04-21
  • 2018-07-01
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 2012-04-06
  • 2019-08-01
  • 2012-02-24
相关资源
最近更新 更多