使用url参数指定python如何处理请求

2024-06-16 11:36:26 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,这看起来应该很基本,但我就是不能让它发挥作用。我收到一个404错误,说找不到资源,尽管我被引导到正确的地址,www.url.com/sea?例如,对于帆船运动,s='1'。我有一个具有不同查询参数的链接列表,我希望用python代码对它们进行不同的处理。我正在使用googleappengine和python和jinja2模板系统。在

这是我的HTML:

  <h3><a href="/" class="center-it">Quick Navigation</a></h3>
    <div class="span1">
    <div class="span1">
      <h4><a href="/sea">Sea</a></h4>
        <ul>
            <li><a href="/sea?s='1'">Sailing</a></li>
            <li><a href="/sea?s='2'">Diving</a></li>
            <li><a href="/sea?s='3'">Surfing</a></li>
            <li><a href="/sea?s='4'">Kite Boarding</a></li>
            <li><a href="/sea?s='5'">Kayaking</a></li>
        </ul>
   </div>

这是Python:

^{pr2}$

更新: 问题其实不是代码问题,而是我的URL处理问题。这是正确的:

app = webapp2.WSGIApplication([('/', MainPage),
                               (r'/sea', Sea)]

Tags: 代码div地址错误li资源ulh4
1条回答
网友
1楼 · 发布于 2024-06-16 11:36:26

404错误的出现不是因为页面中的任何错误,而是因为您的路由或您的应用程序yaml文件。如果您使用的是webapp2,您只需要定义一个具有url r'/air'的路由就可以了。(例如webapp2.Route(r'/sea/', handler=Sea)

顺便说一句,在get请求中不使用查询字符串,您可以将这些字符串作为route kwargs放入,并做一些更好的事情,例如(语法是<KEYWORDNAME:REGULAREXPRESSION>当没有给出关键字名称时(如<:/?>),它只匹配regex,而不传递任何内容给您)

webapp2.Route(r'/sea<:/?><activity:[a-zA-Z]*?>', defaults={"activity":""}, handler=Sea, name="sea")

然后您可以将URL更改为,例如:

^{pr2}$

您需要做的唯一其他更改是在处理程序函数中。它需要接受夸克。(因此,您只需稍微更改一下get请求即可):

get(self, *args, **kwargs):
    activity = kwargs.get("activity")
    if activity in ("sailing", "kayaking", "hiking", "kiteboarding", "surfing", "diving")
       posts = db.GqlQuery("select * from Post where sport=:1 order by created desc limit 30", activity)
    elif activity:
       self.error(404)
    else:
       posts = db.GqlQuery ... etc

这将大大简化您的代码,并使其更加灵活。此外,如果您的站点不经常更新,您可以做一些缓存,使查询更加快速,等等

相关问题 更多 >