2016-06-30 4 views
0

простой вопрос, я Джанго и Pyhton нуб ...Джанго, делая вид с другой точки зрения (вызова определенного URL)

Я пытаюсь сделать очень простую вещь, по крайней мере, я думаю, так:

Я немного формы:

<form action="#" method="post"> 
    {% csrf_token %} 
    <label>Company Number:</label> 
    <input type="text" name="company" placeholder=""/><br> 
    <input type="submit" id="register value=" OK" /> 
</form> 

это отображенный так:

url(r'^userfilt/insertForm/$', views.insertForm, name='insertForm'), 

Теперь после того, как представил эту форму я Wa нт, чтобы вернуться к главному экрану:

url(r'^userfilt/$', views.userfilt, name='userfilt') 

Url отображение файла:

app_name = 'SSO_Management_POC' 
urlpatterns = [ 
    url(r'^$', views.IndexView.as_view(), name='index'), 
    url(r'^user/$', views.user, name='user'), 
    url(r'^userfilt/$', views.userfilt, name='userfilt'), 
    url(r'^userfilt/insertForm/$', views.insertForm, name='insertForm'), 
    #url(r'^updateForm/$', views.updateForm, name='updateForm'), 
    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<question_id>[0-9]+)/vote/$', views.vote, name='vote'), 
] 

Основной вид, как это (но не думаю, что этот код вовлечен в проблему ..) :

def userfilt(request): 
    if request.GET.get('create'): 
     return HttpResponseRedirect('insertForm') 

    if request.GET.get('update'): 
     print request.GET.get('pk') 
     return render(request, 'SSO_Management_POC/updateForm.html') 

    if request.method == 'POST': 
     form = UserForm(request.POST) 
     val = request.POST.get('my_textarea') 
     return render(request, 'SSO_Management_POC/userfilt.html', 
         {'top_user': TopUser.objects.filter(user_name__regex=val)}) 
    else: 
     print '4' 
     return render(request, 'SSO_Management_POC/userfilt.html') 

теперь вызов, который убивает меня происходит, когда я отправить форму, я просто хочу, чтобы вернуться на главную страницу, назвав его с POST, вроде всегда делали!

return render(request, "SSO_Management_POC/userfilt.html") 

Я делаю это так, но проблема заключается в том, что URL не были сброшены .. и результаты, как это,

http://127.0.0.1:8000/SSO_Management_POC/userfilt/insertForm/#

в результате чего каждая операция я сделал на этой странице не работает, потому что он больше не отображается.

Я имел в виду, что это должно быть:

и вместо этого

Чтобы попытаться объяснить мой вопрос лучше ..

я иду к маме в странице (http://127.0.0.1:8000/SSO_Management_POC/userfilt/)

"GET/SSO_Management_POC/userfilt/HTTP/1.1" 200 2648

затем я нажимаю на создании пользователя, чтобы вызвать форму, она приносит мне: (http://127.0.0.1:8000/SSO_Management_POC/userfilt/insertForm/)

«GET/SSO_Management_POC/userfilt/insertForm/HTTP/1.1" 200 1549

чем я отправить форму, и я хотел бы, чтобы вернуться на главную страницу, и тут приходит вещь я не понимаю: он привел меня сюда

http://127.0.0.1:8000/SSO_Management_POC/userfilt/insertForm/#

, но я хочу пойти сюда

http://127.0.0.1:8000/SSO_Management_POC/userfilt

это снова код:

return render(request, "SSO_Management_POC/userfilt.html") 

это вызов, сделанный:

"POST/SSO_Management_POC/userfilt/insertForm/HTTP/1.1" 200 2648

Я попытался с рендер, с HttpResponseRedirect и так далее ... Но всегда случается, что url я звоню с предыдущим, я хочу, чтобы он был сброшен, я хочу, чтобы это было ../ !!!

Единственное, что работает для меня:

return redirect("../") 

но

  1. это грязная
  2. это не позволяет сделать вызов POST!

UPDATE Благодаря Даниилу я также исправить это следующим образом:

return redirect('/SSO_Management_POC/userfilt') 

Но она по-прежнему дает мне тот же вопрос с:

return render(request,'/SSO_Management_POC/userfilt') 

Как мне http://127.0.0.1:8000/SSO_Management_POC/userfilt/insertForm/

Большое спасибо людям!

+0

Я не уверен, что я понимаю ваш вопрос ... Если вы хотите, чтобы ваша форма перенаправлялась с URL-адреса A на URL-адрес B, вам либо нужно указать URL B адресата ('action =" ... "') ваша форма (в этом случае, вид B должен обработать форму) ИЛИ использовать пост для A и перенаправить на B, но вы НЕ МОЖЕТЕ иметь URL B, загруженный запросом POST. Какой вариант вы бы предпочли? – raphv

+0

Если я использую действие, оно всегда приводит меня к http://127.0.0.1:8000/SSO_Management_POC/userfilt/insertForm/userfilt.html вместо/SSO_Management_POC/userfilt.html он всегда добавляет мой текст на последнюю страницу, я был, форма одна! – ivoruJavaBoy

ответ

0

Оказаться ли следующие действия:

В шаблоне:

<form action="{% url 'userfilt' %}" method="post"> 
+0

Нет :(Если мне это нравится, это всегда приводит меня к http://127.0.0.1:8000/SSO_Management_POC/userfilt/insertForm/userfilt.html вместо /SSO_Management_POC/userfilt.html – ivoruJavaBoy

+0

И я хочу вызвать метод формы «def insertForm (request)» через сопоставление url, и это работает, это просто перенаправление, которое я делаю в конце этого, что не работает, потому что он добавляет мне url, запрошенный предыдущим ... – ivoruJavaBoy

1

Вы всегда должны перенаправлять, не оказывает, после успешного поста. Выполнение return redirect(url) - это правильная вещь, и неясно, почему вы недовольны этим.

Обратите внимание, что redirectcan accept the name of a URL pattern, поэтому вы можете сделать return redirect('userfilt'), который доставит вас до нужного места.

+0

Нет Если я так делаю: redirect ('userfilt'), он дает мне эту ошибку: Reverse for 'userfilt' с аргументами '()' и аргументами ключевого слова '{}' не найден. 0 шаблонов попытались: [ ], и если я попробую (как всегда, делать) вот так: return redirect ('SSO_Management_POC/userfilt.html') (так ясно, так просто, должно быть ...), но это приносит мне здесь: http://127.0.0.1 : 8000/SSO_Management_POC/userfilt/insertForm/SSO_Management_POC/userfilt.html – ivoruJavaBoy

+0

Второй случай - тот, который я не понимаю, если я делаю ret urn redirect ('SSO_Management_POC/userfilt.html), почему он приводит меня к http://127.0.0.1:8000/SSO_Management_POC/userfilt/insertForm/SSO_Management_POC/userfilt.html ??? добавив этот url к предыдущему ... – ivoruJavaBoy

+1

Поскольку вы не начали с корня, используя ведущую косую черту: 'redirect ("/... ")' Первая ошибка, по-видимому, потому, что шаблон 'userfilt' включенное внутри пространства имен, вы не указали достаточно информации, чтобы точно знать, что именно. –

Смежные вопросы