inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap

Category 페이지 만들기 (slugField)

카테고리의 slug를 수정하면 301에러가 발생합니다.

444

Minsub Yoon

작성한 질문수 15

0

21:04에서처럼

def create_category(name='life', description=''):
    ....
    category.slug = category.name.replace(' ', '-').replace('/', '')
    category.save()
    ....

를 했더니 테스트에서 301 에러가 발생합니다. 

Traceback (most recent call last):

  File "C:\Users\msra9\python_projects\django_my_website\blog\tests.py", line 200, in test_post_list_by_category

    self.assertEqual(response.status_code, 200)

AssertionError: 301 != 200

cmder에서는 에러 설명이 이것뿐이라서 뭐가 문제인건지 모르겠습니다..

python django bootstrap

답변 4

1

SungYong Lee

혹시, 저에게 보여주지 않은 modes.py의 Category 클래스에 get_absolute_url에서 슬래시를 마지막에 빠뜨리시지 않았나요?

한참을 고민해봤는데, 그게 문제이지 않을까 싶네요?

def get_absolute_url(self):
return '/blog/category/{}/'.format(self.slug)

라고 작성해야 하는데

def get_absolute_url(self):
return '/blog/category/{}'.format(self.slug)

라고 만드신게 아닌가 싶어요.

0

Minsub Yoon

선생님 말씀이 맞네요..

슬래시를 추가했더니 해결됬습니다.

이것때문에 이틀내내 끙끙댔는데.. 해결되서 속이 시원하네요.

정말 감사합니다!

0

Minsub Yoon

테스트코드는

def test_post_list_by_category(self):
# 카테고리를 생성한다.
category_politics = create_category(name='정치/사회')
self.assertGreater(Category.objects.count(), 0)

# 포스트를 생성한다.
post_000 = create_post(
title='the first post',
content='hello world',
author=self.author_000
)
post_001 = create_post(
title='the second post',
content='goodbye world',
author=self.author_000,
category=category_politics
)
self.assertGreater(Post.objects.count(), 0)

# /blog/category/slug/에 접근을 시도하고 성공여부를 확인한다.
response = self.client.get(category_politics.get_absolute_url())
self.assertEqual(response.status_code, 200)

soup = BeautifulSoup(response.content, 'html.parser')

# 페이지 타이틀 태그를 확인한다.
self.assertEqual(soup.title.text, 'Blog - {}'.format(category_politics.name))

# 네비게이션에 Blog, About Me가 있는지 확인한다.
self.check_navbar(soup)

# 미분류 뱃지는 없고, 정치/사회 뱃지만 있는지 확인한다.
main_div = soup.body.find('div', id='main_div')
self.assertNotIn('미분류', main_div.text)
self.assertIn(category_politics.name, main_div.text)

views.py는

class PostList(ListView):
model = Post

def get_queryset(self):
return Post.objects.order_by('-created')

def get_context_data(self, *, object_list=None, **kwargs):
context = super(PostList, self).get_context_data(**kwargs)
context['category_list'] = Category.objects.all()
context['posts_without_category'] = Post.objects.filter(category=None).count()
return context


class PostDetail(DetailView):
model = Post

def get_context_data(self, *, object_list=None, **kwargs):
context = super(PostDetail, self).get_context_data(**kwargs)
context['category_list'] = Category.objects.all()
context['posts_without_category'] = Post.objects.filter(category=None).count()
return context


class PostListByCategory(PostList):
def get_queryset(self):
slug = self.kwargs['slug']
category = Category.objects.get(slug=slug)
return Post.objects.filter(category=category).order_by('-created')

blog/urls.py는 

from django.urls import path
from . import views


urlpatterns = [
path('category/<str:slug>/', views.PostListByCategory.as_view()),
path('<int:pk>/', views.PostDetail.as_view()),
path('', views.PostList.as_view())
]

입니다.

0

SungYong Lee

혹시 테스트코드와 views.py, urls.py도 보여주실 수 있나요?

후속 강의

0

389

1

완성했습니다. 감사합니다

0

318

2

오늘 vps 에 domain 을 지정해주고 아직 활성화되지 않았는데

0

295

1

test 결과 두 가지 error 가 발생했습니다. 뭐가 잘못된 건지 도저히 모르겠습니다.

0

418

1

accounts/login 이 존재하지 않는다고 나옵니다

0

266

2

코드 질문입니다

0

247

1

포스트에 markdown을 사용해서 이미지를 추가할때

0

310

1

New Post 관련 질문드립니다.

0

178

1

이번 영상부터 각 포스트에 프리뷰 사진이 달라지셔서 질문 드립니다.

0

333

1

base 작업한 후 Category가 블로그 하단으로 내려갔습니다.

0

252

1

혹시 소스코드 전체가 담긴 주소를 좀 알 수 있을까요?

0

264

1

9분 경 테스트에서 Assretion Error가 발생합니다.

0

233

1

파이참 초기 설치 후 설정 관련해서 git에 항상 add되는 옵션을 체크했습니다.

0

344

3

F12를 눌러 console 창에서 오류를 확인할때 몇번째 줄인지 나오지 않습니다.

0

395

1

post view도 delete하려는데 막혀서 ㅠㅠ

0

195

1

"GET / HTTP/1.1" 400 143 그리고 "GET / HTTP/1.1" 404 2031

0

3303

3

연결이 안됩니다

0

503

8

서버에 연결하고 나면 그 후에 Cmder가 작동이 안되요

0

377

2

서버에 배포후 어드민계정

0

589

2

안녕하세요! 실서버에 올린 sqlite3의 데이터를 직접 확인하려면 어찌하나요?

0

2038

3

gitignore안먹히는현상

0

292

1

cmder 종료시 서버도 같이 종료됩니다.

0

219

1

' python manage.py makemigration blog ' 명령어 에러

0

587

2

python manage.py makemigrations 를 했을 때 오류가 납니다.

0

557

2