2

アプリにURLスラッグを実装しようとしています(Pythonベース)。スラッギングされたURLをの形式にしたいmyhost/{post_id}/{post_title}

上記の長打率のURL形式を使用してページにアクセスしようとすると、エラーが発生します(Chromeでは、エラーは-予期しないトークン<と表示されます)。URLからを削除する/<post_title>と、ページが正しく読み込まれます。具体的には、の後に「スラッシュ」を付けると<post_id>、問題が発生することに気付きました。その余分なスラッシュなしですべてが正常に動作します(余分なディレクトリ)

私のコードは次のとおりです。

class mainhandler(webapp.RequestHandler):
    def get(self):
        if (self.request.path == '/test'):
            path = os.path.join (os.path.dirname (__file__), 'test.htm')
            self.response.headers ['Content-Type'] = 'text/html'
            self.response.out.write (template.render (path, {}))
        else:                       
            path = os.path.join (os.path.dirname (__file__), 'index.htm')            
            self.response.headers ['Content-Type'] = 'text/html'                 
            self.response.out.write (template.render (path, {}))

    application = webapp.WSGIApplication( [('/.*', mainhandler)],  debug=True) 

基本的に、私はファイルをロードしたいと思いindex.htmます、そしてそのファイルに、私はpost-idURLからを抽出してそれでいくつかのことをすることになっているJavaScriptを持っています。

誰かが私がここで間違っていることを知っていますか?

4

3 に答える 3

1

にあるURLパスを変更する必要がありますapplication。私が正しく理解しているなら、あなたはこのようなことをしたいと思うでしょう:

application = webapp.WSGIApplication(
    [('/(.*)/(.*)', mainhandler),
     ('/.*', mainhandler)],
    debug=True)

そして、あなたを次のように定義しますmainhandler

class mainhandler(webapp.RequestHandler):
    def get(self, post_id=None, post_title=None):

現時点では、それらを使用して何かをしているようには見えませんが、一度mainhandler入ると、それらの変数を使用できるようになります。/最初のマッピングが機能しなかった理由は、URL内の追加のアイテムやアイテムを処理するように設定されていなかったためです。

そして、その後の会話によると、(JavaScript関連のエラーである)の原因は、の前にsyntaxError欠落しているためです。そのプレフィックスがない場合、パスは現在の場所を基準にしています。の場合、それはになります。これはで特定のものにマップされないため、ハンドラー(定義したJavascriptハンドラーではなく)にフォールスルーし、メインスクリプトに戻り、そこでハンドラーパスをたどります。あなたへのリンクはあなたのファイルの代わりにあなたを返します、それはエラーを引き起こします(ここで見つけることができるものと同様です)。/include/load.jslocalhost:8080/1234/a-test-case/1234/a-test-case/include/load.jsapp.yaml.*.js.index.html.js

于 2013-01-16T04:57:39.137 に答える
0

拡張ルートとPython2.7をサポートするwebapp2の使用を検討します。

WebApp2ルーティング

于 2013-01-16T12:05:51.187 に答える
0

RocketDonkeyとの広範な議論の後、私はうまくいく何かを試しました。

スクリプトファイルをから変更しました

<script src="include/load.js" type="text/javascript"></script>

<script **src="/include/load.js"** type="text/javascript"></script>

RocketDonkeyによる実用的なソリューションの説明:フロントスラッシュを使用する場合、「ルートからこのURLパスを取得する」と言っています。しかし、それがなければ、それは現在の場所の観点からです

これは、URLが単にlocalhost:8081/1234であるときに元のコードが機能したが、2番目のディレクトリがある2番目のシナリオでは機能しなかった理由を説明しています。

注意:ここで説明するソリューションは、rocketDonkeyからの元の提案と組み合わせて使用​​されました

于 2013-01-17T03:47:53.530 に答える