2017-05-31 7 views
0

私はajaxを使用するdjangoサイトを持っています。私は、HTML文書内のjavascriptを使用するとき<script>...</script>すべて正常に動作します。しかし、私はファイルをすべて別々の(すべてのjavascript)別々にjavascriptを移動すると、素晴らしいが、ajaxを動作します。すべてのAjaxリクエストでは、私は404 (Not Found)を取得し、常にajaxが始まるドキュメントの行を表示します。私のURLは、このようなものです:ビューで別ファイルでDjango ajaxが動作しない

url(r'^(?P<letnik_id>[1-4])/(?P<classes_id>[A-G])/(?P<subject_id>[\w\-]+)/dodaj$', views.create_exam, name="create_exam"), 

def create_exam(request, letnik_id, classes_id, subject_id): 
... 

とAjax URL:

$.ajax({ 
    url: "{% url 'create_exam' letnik_id=letnik_id classes_id=classes_id subject_id=subject_id %}", 
... 

たぶん、別のファイルであれば{% url 'create_exam' letnik_id=letnik_id classes_id=classes_id subject_id=subject_id %}文句を言わない仕事?しかし、URLを指す他の方法はありますか? 何が間違っていますか?

答えて

2

あなた自身の質問に答えました。別のJSファイルでは、djangoテンプレートタグは機能しません。これは、Djangoビューでレンダリングされたテンプレートでのみ機能します。あなたは別の方法を見つける必要があるかもしれません。

これが最善のアプローチであるかどうかはわかりませんが、テンプレートでグローバル変数jsを宣言してjsファイルで使用することができます。私は本当にそれが最善のアプローチかどうかわかりませんが、うまくいくと思います。あなたのHTML内

あなたは変数を宣言する前に、JSファイルをインポートする前に:

MY_URL = "{% url 'create_exam' letnik_id=letnik_id classes_id=classes_id subject_id=subject_id %}"; 
<script src="myscripts.js"></script> 
+1

私はすでに問題を解決しましたが、2日間はできませんでしたが、これはまったく悪い考えではありません。私はちょうど使用しました:window.location.pathname + "create_exam"、すべてのパラメータはすでにURLにあったので。とにかく、ありがとう! – csserrs

1

何が悪い:

あなたはDjangoのテンプレートタグ({%のURLを使用しようとしています... %})。

それを修正する:

をあなたは

<script> 
window.page_data = { 
    someUrl: {% url ... %} 
}; 
</script> 

をあなたのHTMLへのデータの束をダンプし、ブラウザでウィンドウオブジェクトにアタッチ次にアクセスし、あなたの他のスクリプトを使用するような何かを行うことができます窓からのデータ...

$.ajax(window.page_data.someUrl) 

それとも、あなたはデータ属性でマークアップでURLを埋め込むことができ

<div data-url="{% url ... %}"> 

次に、Javascriptで要素から抽出します。

プロジェクトが複雑になるにつれて、APIはリソース上の各アクションを実行するために必要なデータを渡す必要があります。あなたのクライアントをあなたのサーバーに不必要に結合することにちょうど注意してください。つまり、URLが変更される可能性があるため、URLをハードコードしないでください。予期しない破損が発生します。あなたが何かをハードコーディングする必要があるなら、ある場所でそれを行うようにして、どこかでそれを修正するためにどこかに書き留めておいてください。

関連する問題