django2.2 url , url을 text로 유지하는 방법.

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

    • 이정두 on 2019년 7월 31일 at 4:43 오후
    • Reply

    안녕하세요. CPU High 증상으로 인해 우연히 방문하게 되었는데 좋은 자료가 많네요.
    아직 다 읽어보진 못했지만 미리 감사드리며 많은 도움이 될 것 같습니다.
    그리고 죄송하지만 사용하시는 접속 프로그램이 뭔지 알 수 있을까요??
    정렬이 잘 되어서 보기에 좋아서요. 따로 자료 작성 할 때 도움이 될꺼 같아서 문의 드립니다.

    1. 도움이 되었다니 감사합니다.

      접속프로그램은 어떤 부분을 말씀하시는 건지요? 터미널프로그램을 말씀하시는건지요?

답글 남기기

Your email address will not be published.