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
도움이 되었다니 감사합니다.
접속프로그램은 어떤 부분을 말씀하시는 건지요? 터미널프로그램을 말씀하시는건지요?