【问题标题】:Error with new file, 404 Not Found, App Engine for Python新文件出错,404 Not Found,App Engine for Python
【发布时间】:2013-11-09 13:53:35
【问题描述】:

我有一个在 Google App Engine for Python 上运行的网站。我继承了代码库,并试图自己拼凑起来。我正在尝试完成在网站上创建新页面并从工具栏链接到它的“简单”任务。所以,我在主目录中创建了一个新文件,我们称之为 mypage.html。

这是我在 index.html 文件中用于链接的代码:

 <li {% if mypage_selected %}class='active'{% endif %}>
   <a href='/mypage'>My Page</a>
 </li>

这是我用于处理链接的代码,正如我在 main.py 文件中声明的那样:

class MyPagePage(BaseHandler):
  def get(self):
    template_values = {
      'mypage_selected': True,
      'session': self.session,
    }
    self.response.out.write(
      template.render(get_path("mypage.html"), template_values))

最后,我在此处添加了对页面的引用(也在 main.py 中):

app = webapp2.WSGIApplication([
  ('/', MainPage),
  ...
  ('/mypage/?', MyPagePage),
], debug=True, config=webapp2conf)

我的新文件确实位于 mypage.html。但是,当我运行它时,会显示链接,但单击它会将我带到http://mydomain.net/mypage,这会给出 404 Not Found 错误。有什么想法会发生什么吗?

编辑:这是我的 app.yaml 的处理程序部分:

handlers:
- url: /
  script: main.app
- url: /index\.html
  script: main.app
- url: /static
  static_dir: static
- url: /api.*
  script: api.app
- url: /blog/.*/edit/?
  script: dj.app
- url: /.*
  script: main.app

另外说明:我尝试导航到 mypage.html,这也给了我 404。在这里非常难过。非常感谢任何帮助!

【问题讨论】:

    标签: python html google-app-engine http-status-code-404 wsgi


    【解决方案1】:

    注意处理程序中的/mypage/?。至少必须匹配,但您的链接是 '/mypage',所以您会得到 404。

    【讨论】:

    • 其他链接的格式相同,所以我也照做了。我进行了您建议的更改(链接到“/mypage/”),但仍然得到相同的 404 Not Found。
    • 您尚未在 app.yaml 中包含您的映射。问题将是处理程序映射的 url。你也改了什么?很有可能你改变它也是错误的。您了解为处理程序映射定义的正则表达式吗?
    • 为了澄清,我尝试将我的链接更改为 '/mypage' 到 '/mypage/' 以匹配处理程序,但这不起作用。后来,我尝试将处理程序和链接都更改为“/mypage?”和 '/mypage' 分别,但这也不起作用。
    • 正如我之前所说,我们看不到你的 app.yaml,你也可能在那里遇到问题。
    【解决方案2】:

    一些事情。 我强烈建议使用像gae-boilerplate 这样的样板应用程序。这将有助于解决谷歌应用引擎的许多这些第一次出现的问题。它很轻巧,可以帮助您快速开始制作自己的项目。我推荐它的原因是因为默认情况下它通过使用解决严格的斜线问题(/mypage 和 /mypage/ 之间的区别)

    from webapp2_extras.routes import RedirectRoute
    from web.handlers import handlers
    secure_scheme = 'https'
    
    _routes = [
        RedirectRoute('/', handlers.MainPage, name='main', strict_slash=True),
        RedirectRoute('/mypage/', handlers.mypagepage, name='mypage', strict_slash=True),
        ...
    

    在你的处理程序中你可以拥有:

    class mypagepage(BaseHandler):
        @user_required
        def get(self):
            params = {}
            return self.render_template('mypage.html', **params)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 1970-01-01
      • 2021-12-18
      • 2017-09-03
      相关资源
      最近更新 更多