Django - blog 만들기 3 (urls.py)

yunseul·2024년 6월 17일

Django

목록 보기
12/30

Django - blog 만들기 (urls.py)

bookmark 와 다르게, 2개의 urls.py 작성 진행

  • project 에 대한 urls.py
  • app 에 대한 urls.py

project 에 대한 urls.py 작성

### 위치 이동
cd /Users/user/test/django/project/web/web

### urls.py

vi urls.py

---

from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from django.contrib import admin

# from bookmark.views import BookmarkLV, BookmarkDV                          # 제거 → APP_URLconf 로 옮길 줄 이므로, 삭제

urlpatterns = [
    path('admin/', admin.site.urls),

    url(r'^admin/', admin.site.urls),
    url(r'^bookmark/$', include('bookmark.urls', namespace='bookmark')),     # 추가 → 북마크 앱의 APP_URLconf 를 포함하고, 이름 공간을 'bookmark' 라고 지정
    url(r'^bookmark/', include('blog.urls', namespace='blog')),              # 추가 → 블로그 앱의 APP_URLconf 를 포함하고, 이름 공간을 'blog' 라고 지정

    # Class-based views for Bookmark app                                     # APP_URLconf 로 옮길 줄은 삭제
    # url(r'^bookmark/$', BookmarkLV.as_view(), name='index'),               # 제거
    # url(r'^bookmark/(?P<pk>\d+)/$', BookmarkDV.as_view(), name='detail'),  # 제거
]

url 형식은 django 2.0 이전 버전에서 지원하던 것이므로, url → path 형식으로 변경

### urls.py

vi urls.py

---

from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from django.contrib import admin

# from bookmark.views import BookmarkLV, BookmarkDV

urlpatterns = [
    path('admin/', admin.site.urls),

    path('bookmark/', include(('bookmark.urls', 'bookmark'))),
    path('blog/', include(('blog.urls', 'blog'))),

    # url(r'^admin/', admin.site.urls),
    # url(r'^bookmark/$', include('bookmark.urls', namespace='bookmark')),
    # url(r'^bookmark/', include('blog.urls', namespace='blog')),

    # Class-based views for Bookmark app
    # url(r'^bookmark/$', BookmarkLV.as_view(), name='index'),
    # url(r'^bookmark/(?P<pk>\d+)/$', BookmarkDV.as_view(), name='detail'),
]

bookmark 앱의 urls.py 수정

### 위치 이동
cd /Users/user/test/django/project/web/bookmark

### vi urls.py

---

from django.conf.urls import url
from bookmark.views import BookmarkLV, BookmarkDV

urlpatterns = [
        # Class-based views
        url(r'^$', BookmarkLV.as_view(), name='index'),
        url(r'^(?P<pk>\d+)/$', BookmarkDV.as_view(), name='detail'),
]
  • from bookmark.views import BookmarkLV, BookmarkDV : URLconf 에서 view를 호출하므로, view 모듈의 관련 클래스 import
  • url(r'^$', BookmarkLV.as_view(), name='index'), : URL /bookmark/ 요청을 처리할 뷰 클래스를 지정, url 패턴의 이름은 'bookmark :index'
  • url(r'^(?P\d+)/$', BookmarkDV.as_view(), name='detail'), : URL /bookmark/숫자/ 요청을 처리할 뷰 클래스, url 패턴의 이름은 'bookmark :detail'
  • url(r'^,BookmarkLV.asview(),name=index),url(r(?P<pk>\d+)/', BookmarkLV.as_view(), name='index'),url(r'^(?P<pk>\d+)/', BookmarkDV.as_view(), name='detail'),
    • URL 의 /bookmark/ 부분은 프로젝트 urls.py 파일에서 이미 정의했으므로, /bookmark/ 이외의 부분만 정의
    • URL 패턴의 이름이 변경되었으므로, 관련된 templates 파일을 추가로 변경해주어야 함

blog 앱의 urls.py 수정

### 위치 이동
cd /Users/user/test/django/project/web/blog

### urls.py
vi urls.py

---

from django.conf.urls import url
from blog.views import * 

urlpatterns = [

        # Example: /
        url(r'^$', PostLV.as_view(), name='index'),

        # Example: /post/ (same as /)
        url(r'^post/$', PostLV.as_view(), name='post_list'),

        # Example: /post/djanggo-example/
        url(r'^post/(?P<slug>[-\w]+)/$', PostDV.as_view(), name='post_detail'),

        # Example: /archive/
        url(r'^archive/$', PostAV.as_view(), name='post_archive'),

        # Example: /2012/
        url(r'^(?P<year>\d{4})/$', PostAV.as_view(), name='post_year_archive'),

        # Example: /2012/nov/
        url(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/$', PostMAV.as_view(), name='post_day_archive'),

        # Example: /2012/nov/10/
        url(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\d{1,2})/$', PostDAV.as_view(), name='post_day_archive'),

        # Example /today/
        url(r'^today/$', PostTAV.as_view(), name='post_today_archive'),
]
  • from blog.views import * : URLconf 에서 view 를 호출하므로, 뷰의 모든 클래스를 import
  • Example: / : 가독성이 떨어지므로, 예시 url 표시

  • url(r'^$', PostLV.as_view(), name='index'), : /blog/ 요청을 처리할 view 로 PostLV 클래스로 지정, url 패턴의 이름은 이름공간을 포함해 'blog:index'
  • url(r'^post/$', PostLV.as_view(), name='post_list'), : /blog/post/ 요청을 처리할 view 로 PostLV 클래스 지정, url 패턴의 이름은 이름공간을 포함해 'blog:detail 이 되며, PostLV 클래스는 /blog/ 와 /blog/post/ 2개의 요청을 처리해야 함
  • url(r'^post/(?P[-\w]+)/$', PostDV.as_view(), name='post_detail'), : /blog/post/영단어/ 요청을 처리할 view 로 PostDV 클래스 지정, url 패턴 이름은 이름공간을 포함해 'blog:detail' 이 됨
  • url(r'^archive/$', PostAV.as_view(), name='post_archive'), : /blog/archive/ 요청을 처리할 view 로 PostAV 클래스 지정, url 패턴 이름은 이름공간을 포함해 /blog:archive' 가 됨
  • url(r'^(?P\d{4})/$', PostAV.as_view(), name='post_year_archive'), : /blog/4자리숫자/ 요청을 처리할 view 로 PostYAV 클래스 지정, url 패턴 이름은 이름공간을 포함해 'blog:post_year_archive' 가 됨
  • url(r'^(?P\d{4})/(?P[a-z]{3})/$', PostMAV.as_view(), name='post_day_archive'), : /blog/4자리숫자/3자리소문자/ 요청을 처리할 view 로 PostMAV 클래스 지정, url 패턴 이름은 이름공간을 포함해 'blog:post_month_archive 가 됨
  • url(r'^(?P\d{4})/(?P[a-z]{3})/(?P\d{1,2})/$', PostDAV.as_view(), name='post_day_archive'), : /blog/4자리숫자/3자리소문자/1~2자리숫자/ 요청을 처리할 view 로 PostDAV 로 지정, url 패턴 이름은 이름공간을 포함해 'blog:post_day_archive' 가 됨
  • url(r'^today/$', PostTAV.as_view(), name='post_today_archive'), : /blog/today 요청을 처리할 view 로 PostTAV 클래스 지정, url 패턴 이름은 이름공간을 포함해 'blog:post_today_archive' 가 됨

참고 자료

profile
새로운 것을 시도하고 도전하는 것을 좋아하는 Engineer 입니다..

0개의 댓글