본문 바로가기
WEB/Django

[Django] url 개선

by snow_white 2022. 4. 10.

djangomtv/templates/index.html에 a 태그 추가

{% extends 'base.html' %}
{% load static %}
{% block body %}
<img src="{%static 'jeju.jpg'%}" alt='' width='200px'>
    <form action='/' method="POST"> <!-- POST 방식으로 사용자가 요청하면 views.py에서 request로 받았을 때 정보 출력 가능 -->
        {% csrf_token %}

        <input type='text' name='id'><br>
        <input type='password' name='pw'><br>
        <input type='submit' name='로그인'>
    </form>

    <a href='https://djangomtv-lnurf.run.goorm.io/testtest'>이동</a>
{% endblock body %}

 

djangomtv/djangomtv/urls.py에 a.urls 추가

from django.contrib import admin
from django.urls import path, include
# from main import views # main의 views.py에서 모듈 가져다 사용할 거야!
# from a import views
# from b import views
# from c import views
from main.views import index, test, sample # main의 views.py에서 index 모듈 가져다 사용할 거야!
from a.views import indexA
from b.views import indexB
from c.views import indexC
from d.views import indexD

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index),
    path('sample', sample),
    path('testtest/', test), # main의 views.py 파일에 test 함수 작성하자
    path('aa/', include('a.urls')),
    path('bb/', indexB),
    path('cc/', indexC),
    path('dd/', indexD),
]

 

  • a 폴더에 urls.py 파일 생성
  • 앱 이름을 지정하여 다른 파일에서 함수명이나 url이 동일해도 충돌 피할 수 있음
from django.urls import path, include
from a.views import indexA, indexaaa, indexbbb, indexccc

app_name = 'a' # 앱 이름 지정

urlpatterns = [
    path('', indexA, name='sampleA'), # name 지정해서 html 파일에서 템플릿 태그로 사용할 거야!
    path('aaa/', indexaaa, name='sampleaaa'), # aaa 다음 어떤 문자열이 나오던 간에 a.urls.py로 이동해라
    path('bbb/', indexbbb),
    path('ccc/', indexccc),
]

 

  • a 폴더 views.py에 indexaaa, indexbbb, indexccc 함수 추가
from django.shortcuts import render

def indexA(request):
    return render(request, 'indexA.html')
def indexaaa(request):
    return render(request, 'indexaaa.html')
def indexbbb(request):
    return render(request, 'indexbbb.html')
def indexccc(request):
    return render(request, 'indexccc.html')

 

  • a 폴더 내 templates 폴더에 indexaaa.html 파일 생성
  • 하이퍼링크로 aa(indexA)와 연결
  • a:sampleA ⇒ a 앱의 sampleA로 매핑
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h1>hello world aaa</h1>
    <p>
        내 위치는 djangomtv/a/templates/indexaaa.html 이야
    </p>
    <a href="{% url 'a:sampleA' %}">aa로 이동!!</a>
</body>
</html>

 

  • djangomtv/a/templates/indexA.html 하이퍼링크로 aaa(indexaaa)와 연결
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h1>hello world A</h1>
    <p>
        내 위치는 지금 djangomtv/a/templates/indexA.html 이야!
    </p>
    <a href="{% url 'sampleaaa' %}">aaa로 이동!!</a>
</body>
</html>

'WEB > Django' 카테고리의 다른 글

[Django] FBV와 CBV  (0) 2022.04.10
[Django] ORM, Django Shell, QuerySet  (0) 2022.04.10
[Django] template language  (0) 2022.04.10
[Django] Django 구조와 MTV  (0) 2022.04.10
[Django] admin 페이지에 Notice 등록하기  (0) 2022.04.10

댓글