웹찢남

Django 4일차(TemplateSyntaxError,include,queryset) 본문

BACK_END/Django 공부

Django 4일차(TemplateSyntaxError,include,queryset)

harry595 2020. 8. 13. 21:04

 

TemplateSyntaxError

 

 

 

현재 vs code를 사용하여 개발하고 있는데 beatifier을 통해 저장했는데

위와 같이 'endwith', expected 'elif', 'else' or 'endif' ~~ 이러면서 태그를 잘못 사용했다고 뜬다...

저장을 하기 전과 후의 차이는 단지 beatifier이 적용이 됐나 안됐나 였는데

자꾸 ctrl s 로 저장을 하면 beatifier가 적용돼서 해결법을 찾느라 고생했다.

명령어 중에 save without formatting이 있는데 이걸 사용해서 저장하면 된다.

ctrl+shift+s가 단축키인데 나는 안돼서 ctrl+shift+p의 명령어 팜플렛 속에서 해당 명령어를 찾아 실행했다.

이렇게 저장을 하니 문제가 해결됐다.

 

include

 

전에 짠 코드를 생각해보면 겹치는 코드가 너무 많았다. 

가독성을 올리기 위해 여러 방법을 생각해 봤는데 include라는 걸 찾았다.

중복되는 코드를 html 파일 하나에 저장시킨 후 {% include 해당 html %}을 하면 잘 돌아간다.

나의 경우 중복되는 코드속 같은 이름의 변수에 다른 값이 들어가는데 이 또한 아래와 같이 표현하기 보다

 

{% with a='c' %}

    {%include ./123.html %}

{% endwith %}

 

아래와 같이 코드를 짜는 것이 보기에도 좋고 라인 수 또한 줄어든다.

 

{% include "./123.html" with a='c' %}

 

 

queryset

 

지금까지 사용한 queryset은 데이터를 읽어오는 즉 select문 하나였다.

이제는 Insert 문을 구현해 보았다. 전에 url을 검색하는 페이지를 만들었는데

이때 검색을 하면 db에 저장할 수 있도록 코드를 구현해 보았다.

템플릿에는 변화가 없고 views.py만 수정을 했다.

 

views.py

class search_VIEW(View):
    def get(self, request):
        return render(request, 'user/search.html')

    def post(self, request):
        entry_url = request.POST['url']
        if entry_url:
            try:
                queryset = Board2.objects.get(url=entry_url)
            except ObjectDoesNotExist:
                queryset = False
            if(queryset):
                queryset.hits = queryset.hits+1
                queryset.save()
                return render(request, 'user/search.html', {'url': '%s' % entry_url, 'check': 'Exist on DB. It is Phishing site!!!'})
            else:
                fb = Board2(url=entry_url, date=datetime.now(),
                            memo='tmp', hits=1)
                fb.save()
                return render(request, 'user/search.html', {'url': '%s' % entry_url, 'check': 'does not Exist on DB. register new data...'})

        return render(request, 'user/search.html')

 

코드를 대충 보면 post로 url을 받으면 우선 db에 해당 url이 있는지 유무를 파악한다.

url이 있을 경우 queryset의 hits를 1 더하고 update를 수행한다.

아니면 url이 존재하지 않을 경우 board2의 모델에 맞는 객체를 생성하여

save를 하게된다. update나 insert나 둘다 save를 사용하여 아주 간단하다는 것을 볼 수 있다.

 

내일은 달력 위젯을 jqeury 를 통해 구현해 볼 예정이다.

Comments