django 프로그램을 작성하다 보면, url에 내가원하는 텍스트를 붙여야 하는 경우가 생긴다.
url은 주로 http://some.thing/view/123 이나 http://some.thing/view/wanted_text 이런 형식이 될 것이다.
models.py가 아래와 같을때,
from django.db import models # Create your models here. class TestData(models.Model): ip = models.GenericIPAddressField() mac = models.CharField(max_length=12, default='000000000000') date = models.DateTimeField(null=True) explane = models.CharField(max_length=64, null=True)
세 개의 view를 작성하고 각각의 템플릿을 작성한다.
테이블에서 모든 데이타를 추출하여 리스트를 보여줌 (http://localhost:8000/query/)
class QueryView(View): template_name = 'query.html' def get(self, request): query = 'select * from green_testdata'; data = TestData.objects.raw(query) return render(request, self.template_name, {'data': data})
templates/query.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>query</title> </head> <body> {% for i in data %} <p><a href="{% url 'querypk' i.id %}">{{ i.ip }}</a> | <a href="{%url 'queryslug' i.mac %}">{{ i.mac }}</a></p> {% endfor %} </body> </html>
(http://localhost:8000/query/)에서 ip주소를 클릭했을때 세부 사항을 보여주는 뷰(http://localhost:8000/query/1 )
class QuerySluglView(View): template_name = 'slug.html' def get(self, request, mac): query = 'select * from green_testdata where mac="%s"' %(mac,) data = TestData.objects.raw(query) print(data) return render(request, self.template_name, {'data':data})
templates/pk.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% for i in data %} {{ i.ip }} | {{ i.mac }} | {{ i.date }} | {{ i.explane }}<br> {% endfor %} </body> </body> </html>
아래는 mac 주소를 클릭했을때 세부 정보를 보여주는 뷰(http://localhost:8000/query/aa000a000000/)
class QueryPKView(View): template_name = 'pk.html' def get(self, request, pk): query = 'select * from green_testdata where id=%s' %(pk,) data = TestData.objects.raw(query) return render(request, self.template_name, {'data':data})
templates/slug.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>mac</title> </head> <body> {% for i in data %} {{ i.ip }} | {{ i.mac }} | {{ i.date }} | {{ i.explane }}<br> {% endfor %} </body> </html>
이제, urls.py에 url을 등록하고 실행하면 원하는 결과를 볼 수 있다.
urlpatterns = [ path('query/', QueryView.as_view(), name='queryview'), path('query/<int:pk>/', QueryPKView.as_view(), name='querypk'), path('query/<slug:mac>/', QuerySluglView.as_view(), name='queryslug'), ]
2 comments
안녕하세요. CPU High 증상으로 인해 우연히 방문하게 되었는데 좋은 자료가 많네요.
아직 다 읽어보진 못했지만 미리 감사드리며 많은 도움이 될 것 같습니다.
그리고 죄송하지만 사용하시는 접속 프로그램이 뭔지 알 수 있을까요??
정렬이 잘 되어서 보기에 좋아서요. 따로 자료 작성 할 때 도움이 될꺼 같아서 문의 드립니다.
Author
도움이 되었다니 감사합니다.
접속프로그램은 어떤 부분을 말씀하시는 건지요? 터미널프로그램을 말씀하시는건지요?