2015-09-03 2 views
0

У меня есть шаблон с флажком и кнопкой. Я хочу, когда я выберу все флажок и нажмите кнопку, он должен вернуть значения и отобразить их как httpresponse.django не возвращает соответствующий ответ

Index.html:

<form method="POST" action="/test/"> 
    {% csrf_token %} 
    <div id="row-1"> 
     <button name="pack" id="pack">Pack</button> 
    </div> 
    <div id="row-2"> 
     <table> 
      <thead> 
       <tr> 
        <th><input type="checkbox" onClick="toggle(this, 'no')"></th> 
        <th>Order Id</th> 
       </tr> 
      </thead> 
      <tbody> 
       <tr> 
        <td><input type="checkbox" name="no" value="10000001">10000001</td> 
       </tr> 
       <tr> 
        <td><input type="checkbox" name="no" value="10000002">10000002</td> 
       </tr> 
      </tbody> 
     </table> 
    </div> 
</form> 

views.py:

from django.shortcuts import render, render_to_response 
from django.http import HttpResponse 
from test1 import forms 

def index(request): 
    return render(request, 'index.html') 

def pack(request): 
    oid_list = [] 
    form = forms.PackOrders(request.POST or None) 
    if request.method == 'POST': 
     for item in form.cleaned_data['no']: 
      oid_list.append(item) 
    return HttpResponse(','.join(oid_list)) 

urls.py:

from django.conf.urls import patterns 
from django.conf.urls import url 
from test1 import views 

urlpatterns = patterns('', 
    url(r'^$', views.index, name='index'), 
    url(r'^test/', views.pack, name='pack'),) 

forms.py:

from django import forms 

class PackOrders(forms.Form): 
    order_items = forms.CharField() 

Проблема в том, что когда я устанавливаю флажок и я возвращаю код, он просто перезагружает index.html вместо отображения значений флажка.

Ожидаемый результат:

10000001,10000002 

Что не так с кодом?

EDIT:

проекты urls.py:

from django.conf.urls import include, url 
from django.contrib import admin 

urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^$', include('test1.urls')), 
    url(r'^test/', include('test1.urls')), 
] 
+0

Вы получаете одну запятую (','), если вы посещаете '/ test /' в своем браузере? –

+0

нет, он просто перерисовывает индекс, html, даже когда я иду на 'localhost: 8000/test' –

+0

Хм. Он должен показывать ошибку (у вас есть косая черта в шаблоне url, но не в вашем примере). Вы уверены, что используете опубликованные вами URL-адреса? Вы перезапустили Django с момента последнего изменения ваших URL-адресов? –

ответ

2

Вы включили ваше приложение URLconf в корневых привязки дважды. Вы должны делать это только один раз. Тем не менее, вы должны удалить $ из URL, который включает в себя это:

url(r'^', include('test1.urls')), 

Если вы использовали вторую версию вместо этого, с префиксом «тест /», вы можете создать URL-адреса на «/ тест /» и «/ test/test/', который, по-видимому, не является тем, что вы хотите.

Обратите внимание, что, как я сказал в комментарии, вы всегда должны указывать URL-адреса через свое имя, а не напрямую. Таким образом, ваше действие формы должно быть "{% url 'pack' %}".

+0

Теперь он бросает объект '' PackOrders '' не имеет атрибута 'cleaned_data''. Я получаю это с помощью 'views.py'. В нескольких сообщениях здесь, в SO, они использовали этот атрибут для получения данных формы. Так почему это бросает ошибку? Я использую его неправильно? –

+1

@ManishGupta - Возможно, это потому, что форма недействительна (проверьте с помощью 'form.is_valid()'), чего не будет, потому что вы не указали значение для order_items, и я не знаю, какая релевантность флажки в этой форме. Но это совершенно другой вопрос, выходящий за рамки той, которую вы задали. – Sayse

+0

Я предоставил значение для флажка в html. И 'is_valid()' бросает False. Также это тестовый проект, в котором реальный проект включал данные, которые должны быть переданы в качестве параметра для скрипта python. Итак, как я могу исправить значение. Я просто хочу напечатать значение флажков на странице html. –

0

$ в регулярном выражении указывает на конец строки так, включаемых никогда не получит шанс, чтобы соответствовать любой из его ссылок (который я предполагаю, что это другой urls.py). Поэтому вам нужно изменить URLs к прилагаемому URLs

urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^/', include('test1.urls')), 
    url(r'^test/', include('test1.urls')), 
] 

Обратите внимание, я изменил второй, чтобы удалить $ и заменить его с косыми чертами