2017-12-28 40 views
0

이런 질문이 많이 있지만 내 문제에 대한 해결책을 찾을 수 없습니다.

MyScript.js

는 :

view.py
$('#id_tags').keyup(function(){ 
    var query; 
    query = $(this).val(); 
    $.get('/blog/suggest-category/', {suggestion: query}, function(data){ 
     console.log('data') 
     $('#suggestion_div').html(data); 
    }); 
    }); 

: MyScript.js에서

def get_category_list(max_results=0, starts_with=''): 
    print('get_category_list') 
    cat_list = [] 
    if starts_with: 
     cat_list = Tag.objects.filter(slug__istartswith=starts_with) 
    if max_results > 0: 
     if len(cat_list) > max_results: 
      cat_list = cat_list[:max_results] 
    return cat_list 


def suggest_category(request): 
    print('suggest_category') 
    cat_list = [] 
    starts_with = '' 
    if request.method == 'GET': 
     starts_with = request.GET['suggestion'] 
     cat_list = get_category_list(5, starts_with) 
    print('cat_list', cat_list) 
    #return render(request, 'blog/suggest_tag.html', {'suggestions': cat_list }) 
    return cat_list 

query

은 문자열입니다. 뷰는 (필자는 print('cat_list', cat_list)을 읽을 수 있습니다)라고하지만, 그것은 오류 던져 : 목록이 비어있을 때

을 =>AttributeError: 'list' object has no attribute 'get'

때 아니다 (예 : cat_list [<Tag: Home>]) =>ValueError: too many values to unpack (expected 2)

빈 cat_list와

역 추적 오류 :

cat_list [] 
Internal Server Error: /blog/suggest-category/ 
Traceback (most recent call last): 
    File "D:\Python\Envs\possedimenti\lib\site-packages\django\core\handlers\base. 
py", line 235, in get_response 
    response = middleware_method(request, response) 
    File "D:\Python\Envs\possedimenti\lib\site-packages\django\middleware\clickjac 
king.py", line 31, in process_response 
    if response.get('X-Frame-Options') is not None: 
AttributeError: 'list' object has no attribute 'get' 
[28/Dec/2017 16:25:08] "GET /blog/suggest-category/?suggestion= HTTP/1.1" 500 14 
867 

또는 비어 있지 cat_list과 :

cat_list [<Tag: Home>] 
Internal Server Error: /blog/suggest-category/ 
Traceback (most recent call last): 
    File "D:\Python\Envs\possedimenti\lib\site-packages\django\core\handlers\base. 
py", line 235, in get_response 
    response = middleware_method(request, response) 
    File "D:\Python\Envs\possedimenti\lib\site-packages\django\middleware\clickjac 
king.py", line 31, in process_response 
    if response.get('X-Frame-Options') is not None: 
    File "D:\Python\Envs\possedimenti\lib\site-packages\django\db\models\query.py" 
, line 378, in get 
    clone = self.filter(*args, **kwargs) 
    File "D:\Python\Envs\possedimenti\lib\site-packages\django\db\models\query.py" 
, line 790, in filter 
    return self._filter_or_exclude(False, *args, **kwargs) 
    File "D:\Python\Envs\possedimenti\lib\site-packages\django\db\models\query.py" 
, line 808, in _filter_or_exclude 
    clone.query.add_q(Q(*args, **kwargs)) 
    File "D:\Python\Envs\possedimenti\lib\site-packages\django\db\models\sql\query 
.py", line 1243, in add_q 
    clause, _ = self._add_q(q_object, self.used_aliases) 
    File "D:\Python\Envs\possedimenti\lib\site-packages\django\db\models\sql\query 
.py", line 1269, in _add_q 
    allow_joins=allow_joins, split_subq=split_subq, 
    File "D:\Python\Envs\possedimenti\lib\site-packages\django\db\models\sql\query 
.py", line 1146, in build_filter 
    arg, value = filter_expr 
ValueError: too many values to unpack (expected 2) 
[28/Dec/2017 16:08:23] "GET /blog/suggest-category/?suggestion=h HTTP/1.1" 500 1 
5797 

은 아마 TAG 모델을 도움이 될 수 있습니다, 그것은 taggit에서 오는 :

@python_2_unicode_compatible 
class TagBase(models.Model): 
    name = models.CharField(verbose_name=_('Name'), unique=True, max_length=100) 
    slug = models.SlugField(verbose_name=_('Slug'), unique=True, max_length=100) 

    def __str__(self): 
     return self.name 

    class Meta: 
     abstract = True 

    def save(self, *args, **kwargs): 
     if not self.pk and not self.slug: 
      self.slug = self.slugify(self.name) 
      from django.db import router 
      using = kwargs.get("using") or router.db_for_write(
       type(self), instance=self) 
      # Make sure we write to the same db for all attempted writes, 
      # with a multi-master setup, theoretically we could try to 
      # write and rollback on different DBs 
      kwargs["using"] = using 
      # Be oportunistic and try to save the tag, this should work for 
      # most cases ;) 
      try: 
       with atomic(using=using): 
        res = super(TagBase, self).save(*args, **kwargs) 
       return res 
      except IntegrityError: 
       pass 
      # Now try to find existing slugs with similar names 
      slugs = set(
       self.__class__._default_manager 
       .filter(slug__startswith=self.slug) 
       .values_list('slug', flat=True) 
      ) 
      i = 1 
      while True: 
       slug = self.slugify(self.name, i) 
       if slug not in slugs: 
        self.slug = slug 
        # We purposely ignore concurrecny issues here for now. 
        # (That is, till we found a nice solution...) 
        return super(TagBase, self).save(*args, **kwargs) 
       i += 1 
     else: 
      return super(TagBase, self).save(*args, **kwargs) 

    def slugify(self, tag, i=None): 
     slug = default_slugify(unidecode(tag)) 
     if i is not None: 
      slug += "_%d" % i 
     return slug 


class Tag(TagBase): 
    class Meta: 
     verbose_name = _("Tag") 
     verbose_name_plural = _("Tags") 
     app_label = 'taggit' 

편집 : 나는 변경 내 view.py :

{% load i18n %} 

    <ul> 
     {% if suggestions %} 
      {% for c in suggestions %} 
       <li>{{ c.name }}</li> 
      {% endfor %} 
     {% else %} 
      <li>{% trans "There are no tag present." %}</li> 
     {% endif %} 
    </ul> 
:

def suggest_category(request): 
    print('suggest_category') 
    cat_list = [] 
    starts_with = '' 
    if request.method == 'GET': 
     starts_with = request.GET['suggestion'] 
     cat_list = get_category_list(5, starts_with) 
    print('cat_list', cat_list) 
    return render(request, 'blog/suggest_tag.html', {'suggestions': cat_list }) 

여기 내 템플릿 suggest_tag.html입니다

이제 내가 만든 부서에서 쓰게됩니다 (id='suggestion_div') 그래서 충분히 작동합니다.

/편집은

+1

파이썬 세계의 백 추적은 오류가 어디에 있었는지 알려주지 만 포함시키지 않았습니다. 어디서나'.get '호출을 보지 못했는데, 놓쳤습니까? –

+0

.get은 4 행의 스크립트에서 호출됩니다 (하지만 아마도 다른 것을 말하고있는 것입니다 ...). 어쨌든 Traceback이 추가되었습니다. – fabio

+0

JavaScript .get 호출이지만 파이썬 오류가 발생했습니다 –

답변

2

귀하의 오류는보기에서가 아니라 HttpResponse에 뭔가를 반환하여 발생합니다.

코드에서 정확하게 JavaScript로 보내려는 내용이 명확하지 않지만, 무엇이든지간에 HttpResponse 나 그 서브 클래스에 래핑되어야합니다. 아마도 당신은 queryset을 serialize하기를 원합니까?