2015-12-22 3 views
0

я пытаюсь отобразить размеры с помощью Ajax, но он не появляется после АЯКС успехаНевозможно отобразить информацию с помощью Ajax Джанго

здесь Ajax скрипт

<script type="text/javascript"> 
    function getStoreView(event, productId) { 
     event.preventDefault(); 
     var data = { 
      productId : productId 
     } 
     // Send productId as query param of url 
     $.ajax({   
      type: "GET", 
      url: "{% url 'storeView' user=store.user %}", 
      data: data, 
      success: function(data) { 
       var html = ""; 
       $.each(data.sizes, function(index,sizes) { 
       console.log(sizes.value) 
      }); 
      }, 

      error: function(response, error) { 
       alert(error); 
      } 
     }); 
    }; 
</script> 

здесь есть шаблон

<form id="form" action="{% url 'storeView' user=store.user %}" method="post" /> 
         {% csrf_token %}   

         <div class="increment"> 
         {% for size in sizes %} 

         <strong class="pull-left">{{size}}:</strong> 
         <input type = "number" name="quantity" value="{{product.quantity}}"> 
         <input type = "hidden" name = "size" value="{{size}}"> 
         <input type = "hidden" name = "productid" value = "        {{product.id}}"> 
         {% endfor %} 
         </div> 
         <input type="submit" value="submit" id="submit"/> 
        </form> 

здесь views.py

if request.user.is_authenticated(): 
     productid = request.GET.get('productId') 
     if request.is_ajax(): 
      try: 
       sizes = StoreProduct.objects.get_size(productid) 
      except: 
       sizes = None 

      sizes = list(sizes.values()) 

      data = { 
      "sizes" : sizes 
      } 

      return JsonResponse(data) 

Я могу настроить размеры журналов, но как их отображать в forloop?

на основе ответа гибрида следующие отладочные генерируется

File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "C:\Users\lenovo\Desktop\plump\Plumpin\src\store\views.py" in StoreView 
    61.   return render(request , "store/storeform.html" , {'sizes' : sizes}) 
File "C:\Python27\lib\site-packages\django\shortcuts.py" in render 
    67.    template_name, context, request=request, using=using) 
File "C:\Python27\lib\site-packages\django\template\loader.py" in render_to_string 
    99.   return template.render(context, request) 
File "C:\Python27\lib\site-packages\django\template\backends\django.py" in render 
    74.   return self.template.render(context) 
File "C:\Python27\lib\site-packages\django\template\base.py" in render 
    209.      return self._render(context) 
File "C:\Python27\lib\site-packages\django\template\base.py" in _render 
    201.   return self.nodelist.render(context) 
File "C:\Python27\lib\site-packages\django\template\base.py" in render 
    903.     bit = self.render_node(node, context) 
File "C:\Python27\lib\site-packages\django\template\debug.py" in render_node 
    79.    return node.render(context) 
File "C:\Python27\lib\site-packages\django\template\defaulttags.py" in render 
    507.       six.reraise(*exc_info) 
File "C:\Python27\lib\site-packages\django\template\defaulttags.py" in render 
    493.    url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app) 
File "C:\Python27\lib\site-packages\django\core\urlresolvers.py" in reverse 
    579.  return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))) 
File "C:\Python27\lib\site-packages\django\core\urlresolvers.py" in _reverse_with_prefix 
    496.        (lookup_view_s, args, kwargs, len(patterns), patterns)) 

Exception Type: NoReverseMatch at /store/storeView/zara/ 
Exception Value: Reverse for 'storeView' with arguments '()' and keyword arguments '{u'user': ''}' not found. 2 pattern(s) tried: ['store/storeView/(?P<user>[\\w-]+)/$', 'store/storeView/(?P<user>[\\w-]+)/$'] 
+0

Вы показываете нам свои html и js, но нам также нужно см. ваши views.py – Hybrid

+0

включил представление –

ответ

1

То, что вы пытаетесь сделать, требует, чтобы вы объединили ответ AJAX с циклом for, поэтому вам понадобится его обработать Django. Единственный способ сделать это - вернуть ответ render() вместо JSONResponse, а затем добавить его в свой html. Например:

Создайте новый HTML-файл с именем _store-form.html:

<form id="form" action="{% url 'storeView' user=store.user %}" method="post" /> 
        {% csrf_token %}   

        <div class="increment"> 
        {% for size in sizes %} 

        <strong class="pull-left">{{size}}:</strong> 
        <input type = "number" name="quantity" value="{{product.quantity}}"> 
        <input type = "hidden" name = "size" value="{{size}}"> 
        <input type = "hidden" name = "productid" value = "        {{product.id}}"> 
        {% endfor %} 
        </div> 
        <input type="submit" value="submit" id="submit"/> 
</form> 

В вашем views.py, вместо последней строки return JsonResponse(data):

return render(request, '_store-form.html', {'sizes': sizes}) 

и теперь изменить ваш JS для добавления новый возвращенный html на вашу страницу:

<script type="text/javascript"> 
    function getStoreView(event, productId) { 
     event.preventDefault(); 
     var data = { 
      productId : productId 
     } 
     // Send productId as query param of url 
     $.ajax({   
      type: "GET", 
      url: "{% url 'storeView' user=store.user %}", 
      data: data, 
      success: function(data) { 
       $('body').append(data); 
      }, 

      error: function(response, error) { 
       alert(error); 
      } 
     }); 
    }; 
</script> 
+0

it throws 500 error –

+0

Какова точность отслеживания ошибок? – Hybrid

+0

отредактирован для inlcude traceback ... –

0

переменные шаблона Джанго передаются из views.py через контекст, в то время как Ajax является извлечение значения из другого. Переменные шаблона Django и переменные javascript - две разные вещи, вы не можете ожидать, что они будут работать вместе. Вам нужно использовать javascript для визуализации формы вручную. Взгляните на jQuery doc.

+0

Как вы можете объяснить это, пожалуйста. спасибо –