2016-09-04 9 views
0

でフォームを投稿することはできませんし、私はnoobのここでちょっとね:))は、それはジャンゴでの私の最初の本当のプロジェクトだジャンゴ

を私のインデックスページで、私は、ユーザーからいくつかの情報を必要とし、別のビューに投稿します。私が見つけたものをここに

NoReverseMatch at /download/ 
Reverse for 'progress' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['download/(?P<download_id>[0-9]+)/progress/$'] 

閲覧ページ:

class IndexView(generic.TemplateView): 
    model = Download 
    template_name = 'download/index.html' 

def progress(request, download_link): 
    download = models.Download(link=download_link, status = 0) 
    download.save() 
    return HttpResponseRedirect(reverse('download:detail', args=(download.id,))) 

インデックスページ:

<form class="download" action="{% url 'download:progress' download_link %}" method="post"> 
    <input type="input" name="download_link" id="download_link" class="input" placeholder="Enter the URL:" value="{{download_link}}" required/> 
    <input type="submit" class="btn btn-primary" value="Download"> 
</form> 

モデル:

class Download(models.Model): 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    link = models.CharField(max_length=3000) 
    status = models.IntegerField(default=-1) 

のURL:私はこの時点で最新の安定ジャンゴを使用してい

app_name = 'download' 
urlpatterns = [ 
    url(r'^$', views.IndexView.as_view(), name='index'), 
    url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'), 
    url(r'^(?P<pk>[0-9]+)/results/$', views.ResultsView.as_view(), name='results'), 
    url(r'^(?P<download_id>[0-9]+)/progress/$', views.progress, name='progress'), 
] 

(V1.10)

+0

テンプレート内の 'download_link'変数はどこから来ますか? – ozgur

+0

@ozgurそれはテキストボックスから来ます –

+0

あなたはURLの中で 'download_id'を探しますが、代わりに' download_link'を送ります。 – ozgur

答えて

0

あなたが見て/download/パスの後にソースコードがありますか? download_linkcontextに渡されない場合は、フォームのaction属性に何も意味しません。フォームの値を取得しようとしていますが、ユーザーが入力する前にページの読み込み時にhtmlが生成されます。

フォームから受け取った入力で何かを行うには、GETまたはPOSTリクエストでview関数に渡す必要があります。 GETリクエストのみがURLに引数を追加し、フォームはそれを処理します。actionに指定する必要はありません。

あなたはこのような何か行うことができますあなたの場合は

:あなたはおそらく考えなければならないview機能で、また

<form class="download" action="{% url 'download:progress' %}" method="post"> 
    <input type="input" name="download_link" id="download_link" class="input" placeholder="Enter the URL:" required/> 
    <input type="submit" class="btn btn-primary" value="Download"> 
</form> 

ビュー:

def progress(request): 
    if request.method == 'POST': 
     download_link = request.POST['download_link'] 
     download = models.Download(link=download_link, status = 0) 
     download.save() 
     return HttpResponseRedirect(reverse('download:detail', args=(download.id,))) 

テンプレートをDownloadのインスタンスがあるかどうかを確認する方法これらのデータが存在し、新しいインスタンスを作成する場合は他のフィールドの情報も渡します。

progress URLをurl(r'^progress$', views.progress, name='progress')に変更してください(末尾にスラッシュはありません)。そうすれば、URLは解決可能でなければならず、view関数はPOSTデータを受け取ることができるはずです。ここから、あなたが望む結果を得るために修正を続けることができます。

Djangoのドキュメントには、フォームに関する情報がたくさんあります。あなたはそれを理解するためにそれを通過する必要があります - https://docs.djangoproject.com/en/1.10/topics/forms/https://docs.djangoproject.com/en/1.10/ref/forms/

+0

それはうまくいかず、私は質問に 'urls.py'を追加します。 –

関連する問題