이 syntax error들을 어떻게 해결할 수 있을지 알려주시면 감사하겠습니다.


안녕하세요, 파이썬 처음 배우는 학생입니다. 매우 쉬운 질문일지 모르나 제가 검색능력과 이해력이 현저히 부족하여 여기에 질문올립니다.

제가 작성한 views.py 의 전체적인 내용은 이렇습니다.

def post_list(request):
    request.session['lat'] = request.POST['user_lat']
    request.session['lon'] = request.POST['user_lon']
    userpoint = GEOSGeometry('POINT('lat' 'lon')', srid=4326)
    list_total = list_1
    i=1
    while i:
        list_i = Post.objects.filter(point_distance__lte = userpoint, D(km=i)
        list_total = 'list_total' + ',' + 'list_i')
        result_list = list(chain(list_total))
        if len(result_list) >= 50 :
            break

    template = loader.get_template('blog/index.html')
    context = {
        'post_list': post_list,
    }

    return HttpResponse(template.render(context, request))

전 geodjango를 이용해서 request.session[]으로 request.POST[]된 user의 lat, lon 값을 user_lat, user_lon으로 받아 coordiantes를 형성해서 거기에 맞춰서 리스트를 구하려고 합니다.

그런데 터미널에서 python3 manage.py makemigrations를 하려고 하니

첫 번째,

    request.session['lat'] = request.POST['user_lat']
    request.session['lon'] = request.POST['user_lon']
    userpoint = GEOSGeometry('POINT('lat' 'lon')', srid=4326)

여기에서

userpoint = GEOSGeometry('POINT('lat' 'lon')', srid=4326)
                                  ^
                               SyntaxError: invalid syntax

가 밟생하고

두 번째,

    list_i = Post.objects.filter(created_date__gt = elasped_minutes).filter(point_distance__lte = userpoint, D(km='i'))
                                                                                                                    ^
SyntaxError: positional argument follows keyword argument

이렇게 i를 쓰지 말라는 에러가 발생합니다.

그리고 마지막으로

    while i:
        list_i = Post.objects.filter(point_distance__lte = userpoint, D(km=i)
        list_total = 'list_total' + ',' + 'list_i')
        result_list = list(chain(list_total))
        if len(result_list) >= 50 :
            break

에서

    list_total = list_total + ',' + 'list_i'
             ^
SyntaxError: invalid syntax

가 발생합니다.

앞에 두 가지도 정말 어떻게 해결해야할지 초보가 혼자 하는 중이라 막막하여 해결책을 주시기를 바라고 있습니다.

그런데 특히 마지막

    while i:
        list_i = Post.objects.filter(point_distance__lte = userpoint, D(km=i)
        list_total = 'list_total' + ',' + 'list_i')
        result_list = list(chain(list_total))
        if len(result_list) >= 50 :
            break

에서 while 문의 결과로 나온 Post 모델의 list를

result_list 라는 것에 from itertools import chain 을 이용해서

chain 을 해서 한번에 쭉 뽑아내려고 하는데 제가 시도한 코드가 앞에서 다 에러가 나는 바람에 저게 가능한지, 되는지조차 알 수가 없습니다.

알려주시면 감사하겠습니다. 매번 초보같은 질문 올려 죄송합니다.

itertools 에 대한 python doc : https://docs.python.org/3.3/library/itertools.html

첫 번째와 두 번째 질문 예시 : https://docs.djangoproject.com/en/dev/ref/contrib/gis/db-api/#distance-lookups 여기의 example을 보고 따라했습니다.

현재 파이썬 3.5인가 최신버전을 apt-get을 통해 설치했고 , django 역시 pip3 를 이용해 최신버전을 설치했다고 알고 있습니다.

  • 2016년 07월 18일에 작성됨

조회수 168


1 답변


좋아요
1
싫어요
채택취소하기

큰따옴표와 작은따옴표를 섞어서 쓴 부분이 잘못되어 보이네요.

lat = request.POST['user_lat']
lon = request.POST['user_lon']

userpoint = GEOSGeometry('POINT({}, {})'.format(lat,lon) , srid=4326)

와 같이 수정해 보시겠어요?

  • 2016년 07월 19일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.

  • 네 한번 해보겠습니다 감사합니다.    홍민구   2016.7.19 15:37     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close