1

Python で Google App Engine の webapp2 フレームワーク上にアプリを構築しています。テンプレート エンジンとして Jinja2 を使用し、スタイリングには Twitter Bootstrap を使用しています。素敵な「layout.html」を構築し、他のすべてのテンプレートを「layout.html」から継承させた後、デプロイしました。URL が動的である 1 つを除いて、すべてのページはプロパティをレンダリングします。

WSGI ハンドラは次のようになります。

webapp2.WSGIApplication = ([('/login', LoginPage),
                           ('/updates', Update),
                           ('/updates/.*', Individual)],
                           debug = True)

# as you can see I'm using the catchall regex for Individual

機能的には、 Individualが扱う動的に生成された各 URL が適切に動作します。これがハンドラーです。このハンドラー内のすべてが実行されます。

class Individual(Handler):
    def get(self):
            url_u = str(self.request.url)
            posit = url_u.find('updates')
            bus1 = url_u[posit+8:]
            bus = bus1.replace('%20', chr(32))
            b = BusUpdates.all()
            this_bus = b.order('-timestamp').filter('bus = ', bus).fetch(limit=10)
            name = users.get_current_user()
            user = None
            if name:
                    user = name.nickname()
            logout = users.create_logout_url(self.request.uri)

            self.render("individual.html", bus=bus, user=user, this_bus=this_bus, logout=logout)

典型的な URL は次のようになります: http://www.megabusfinder.appspot.com/updates/St%20Louis,%20MO-Chicago,%20IL-4-12-930AM-310PM

ここに私のapp.yamlファイルがあります

application: megabusfinder
version: 1
runtime: python27
api_version: 1
threadsafe: no


handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico


- url: /static/stylesheets
  static_dir: static/stylesheets


- url: /twitter-bootstrap-37d0a30
  static_dir: twitter-bootstrap-37d0a30


- url: /static/xml
  static_dir: static/xml

- url: .*
  script: main.app


builtins:
- remote_api: on


libraries:
- name: webapp2
  version: "2.5.1"
- name: jinja2
  version: latest

さて、以前は「layout.html」から継承した「individual.html」がありました。約 1 時間前の時点で、私はもはやそれを行っておらず、「layout.html」で使用するすべての必要なブートストラップを「individual.html」に手動で追加しました。これでも、スタイリングは有効ではありません。

前もって感謝します。

4

1 に答える 1

2

問題は、スタイルシートに絶対パスではなく相対 URL パスを使用していることです。あなたはこれをやっています:

<link href="styles/bootstrap.css" rel="stylesheet">

これを行う必要がある場合:

<link href="/styles/bootstrap.css" rel="stylesheet">

href問題は、既存の URL と、 (またはsrcJavaScript ファイルで)提供された相対 URL を組み合わせることによって、ブラウザーがそのような相対 URL を要求することです。

ルートページで、ブラウザーは megabusfinder.appspot.com/styles/bootstrap.css を要求します。ルート以外のページでは、存在しない megabusfinder.appspot.com/some/sub/path + styles/bootstrap.css を要求し、404 (およびスタイル設定されていないページ) が発生します。

先頭にスラッシュを付けると、ブラウザはパスを結合するのではなく、現在のパスをパスに置き換えることが保証されます。href

URI のマージ方法の詳細については、 RFC 3986を参照してください。

于 2013-04-10T02:03:59.747 に答える