작성
·
38
0
NoReverseMatch 자체가 되돌아갈 곳이 없다는 오류인 것은 알겠으나,
왜 song_archive_year를 못찾는지 모르겠습니다.
View
class SongYearArchiveView(YearArchiveView):
model=Song
date_field="release_date"
# make_object_list = True
urls.py
urlpatterns = [
...
path(route="archives/<int:year>/", view=views.SongYearArchiveView.as_view(), name="song_archive_year"),
]
--- 혹시나 해서 View를 다음과 같이 했는데
class SongYearArchiveView(YearArchiveView):
model = Song
date_field = "release_date" # 조회할 날짜 필드
make_object_list = True
def get_queryset(self):
year = self.kwargs['year'] # URL에서 'year' 값을 가져옴
return Song.objects.filter(release_date__year=year)
인지는 하는 것 같아요. 그런데 버튼은 없군요.
답변 2
0
from django.urls import path, re_path
from . import converters
from . import views
# app_name = "hottrack"
app_name 이 설정되어 있으면 리버스 매치에 각각 설정해야하는걸 꺠달았네요...
허헣...
0
안녕하세요, 인프런 AI 인턴입니다.
임찬님께서 겪고 계신 NoReverseMatch
오류는 Django에서 URL을 역으로 찾을 수 없다는 것을 의미합니다. 즉, 템플릿이나 뷰에서 지정한 URL의 name과 실제 URLconf에 정의된 name이 일치하지 않거나, URLconf에 해당 이름이 없는 경우 발생할 수 있습니다. 임찬님의 경우, ‘song_archive_year’라는 이름을 가진 URL을 찾지 못하고 있는 상황으로 보입니다.
URLconf 확인: 임찬님의 urls.py
에서는 path(route="archives/<int:year>/", view=views.SongYearArchiveView.as_view(), name="song_archive_year")
와 같이 정의되어 있어, 이는 올바르게 설정되어 보입니다. 이 설정으로 song_archive_year
이름을 사용하여 URL을 역으로 출력할 수 있습니다.
템플릿 확인: 템플릿 파일에서 {% url 'song_archive_year' year=2023 %}
와 같은 형식으로 URL 태그를 사용하여야 합니다. 만약 변수를 사용할 경우, 해당 변수가 템플릿 컨텍스트 내에 있는지 확인해야 합니다.
변수 전달: 임찬님께서 이미 get_queryset
에서 year
변수를 사용하는 것으로 보이지만, 템플릿에도 적절히 전달되는지 확인해 보십시오. 변수 전달에 문제가 있을 경우, 오류가 발생할 수 있습니다.
아래 유사한 문제를 해결한 링크들을 참고하시면 도움이 될 것입니다:
django.urls.exceptions.NoReverseMatch - URL Reverse 관련하여 발생할 수 있는 문제와 해결 방법을 제안합니다.
NoReverseMatch at /accounts/signup/ - NoReverseMatch
에러를 처리하는 다양한 방법에 대해 설명합니다.
이 링크들을 통해, NoReverseMatch
오류의 원인과 해결책에 대한 힌트를 얻으실 수 있을 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변이 늦었습니다.
말씀하신 대로 urlpatterns가 정의된 곳에 app_name 이 설정되어있다면, 이는 namespace로서 사용이 되구요. URL Reverse 시에는 반드시 같이 지정해주셔야 합니다.
잘 찾아주셨습니다. 👍
화이팅입니다. ;-)