Django 템플릿 URL 태그에 URL 매개 변수 추가하기
URL 이름 사용하기
Django URL에는 이름을 지정할 수 있습니다. URL 이름을 사용하면 템플릿에서 URL 태그를 사용하여 URL을 생성하고, 매개 변수를 전달할 수 있습니다.
예제:
# urls.py
from django.urls import path
urlpatterns = [
path('articles/<int:pk>/', views.article_detail, name='article_detail'),
]
<a href="{% url 'article_detail' pk=article.id %}">기사 보기</a>
위 예제에서 article_detail
URL에는 pk
라는 이름의 매개 변수가 있습니다. 템플릿에서 {% url 'article_detail' %}
태그를 사용하여 URL을 생성하고, pk
매개 변수에 article.id
값을 전달할 수 있습니다.
add_query_string 매개 변수 사용하기
add_query_string
매개 변수를 사용하면 URL 태그에 쿼리 문자열을 추가할 수 있습니다. 쿼리 문자열은 URL 끝에 물음표(?)와 함께 키-값 쌍으로 구성됩니다.
<a href="{% url 'articles' %}?sort=newest">최신 기사 보기</a>
위 예제에서 {% url 'articles' %}
태그에는 add_query_string
매개 변수가 사용되어 sort=newest
쿼리 문자열이 추가됩니다.
urlencode 필터 사용하기
urlencode
필터를 사용하면 딕셔너리를 쿼리 문자열로 변환할 수 있습니다.
<a href="{% url 'articles' %}?{% urlencode query_dict %}">기사 검색</a>
위 예제에서 {% urlencode query_dict %}
필터는 query_dict
딕셔너리를 쿼리 문자열로 변환합니다. 예를 들어, query_dict
딕셔너리가 다음과 같다면:
query_dict = {
'q': '검색어',
'category': '분류',
}
생성되는 쿼리 문자열은 다음과 같습니다:
q=검색어&category=분류
주의:
- Django 2.0부터는
urlencode
필터 대신asdict
필터와 함께add_query_string
매개 변수를 사용하는 것이 권장됩니다.
예제 코드
URL 이름 사용하기
from django.urls import path
urlpatterns = [
path('articles/<int:pk>/', views.article_detail, name='article_detail'),
]
article_detail.html
{% extends 'base.html' %}
{% block content %}
<h1>기사 상세 보기</h1>
<p>{{ article.title }}</p>
<p>{{ article.content }}</p>
<a href="{% url 'article_edit' pk=article.id %}">수정하기</a>
{% endblock %}
{% extends 'base.html' %}
{% block content %}
<h1>기사 수정하기</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">수정하기</button>
</form>
{% endblock %}
views.py
from django.shortcuts import render, get_object_or_404
def article_detail(request, pk):
article = get_object_or_404(Article, pk=pk)
return render(request, 'article_detail.html', {'article': article})
def article_edit(request, pk):
article = get_object_or_404(Article, pk=pk)
if request.method == 'POST':
form = ArticleForm(request.POST, instance=article)
if form.is_valid():
form.save()
return redirect('article_detail', pk=article.pk)
else:
form = ArticleForm(instance=article)
return render(request, 'article_edit.html', {'form': form})
위 예제에서는 article_detail
URL과 article_edit
URL을 정의했습니다. article_detail
URL에는 pk
라는 이름의 매개 변수가 있으며, 이 매개 변수는 article_detail.html
템플릿에서 article
객체를 가져오는 데 사용됩니다. article_edit
URL도 pk
매개 변수를 사용하여 article_edit.html
템플릿에서 article
객체를 가져옵니다.
add_query_string 매개 변수 사용하기
{% extends 'base.html' %}
{% block content %}
<h1>기사 목록</h1>
<ul>
{% for article in articles %}
<li><a href="{% url 'article_detail' pk=article.id %}">{{ article.title }}</a></li>
{% endfor %}
</ul>
<a href="{% url 'articles' %}?sort=newest">최신 기사 보기</a>
<a href="{% url 'articles' %}?category=technology">기술 분류 기사 보기</a>
{% endblock %}
urlencode 필터 사용하기
{% extends 'base.html' %}
{% block content %}
<h1>기사 목록</h1>
<ul>
{% for article in articles %}
<li><a href="{% url 'article_detail' pk=article.id %}">{{ article.title }}</a></li>
{% endfor %}
</ul>
<a href="{% url 'articles' %}?{% urlencode query_dict %}">기사 검색</a>
{% endblock %}
from django.shortcuts import render
def articles(request):
query_dict = request.GET.dict()
if 'q' in query_dict:
articles = articles.objects.filter(title__icontains=query_dict['q'])
elif 'category' in query_dict:
articles = articles.objects.filter(category=query_dict['category'])
else:
articles = articles.objects.all()
return render(request, 'articles.html', {'articles': articles})
Django 템플릿 URL 태그에 URL 매개 변수 추가하기: 대체 방법
직접 URL 생성하기
<a href="/articles/{{ article.id }}/">기사 보기</a>
위 예제에서 URL은 직접 문자열로 생성됩니다. 이 방법은 간단하지만, URL 이름을 사용하는 방법보다 유연하지 않습니다.
reverse 함수 사용하기
<a href="{% reverse 'article_detail' article.id %}">기사 보기</a>
위 예제에서 {% reverse 'article_detail' article.id %}
태그는 reverse
함수를 사용하여 URL을 생성합니다. reverse
함수는 URL 이름과 매개 변수를 인수로 받아 URL을 문자열로 반환합니다.
URL 태그의 kwargs 매개 변수 사용하기
<a href="{% url 'article_detail' kwargs={'pk': article.id} %}">기사 보기</a>
위 예제에서 {% url 'article_detail' kwargs={'pk': article.id} %}
태그는 kwargs
매개 변수를 사용하여 URL 매개 변수를 전달합니다. kwargs
매개 변수는 딕셔너리 형태로 매개 변수 이름과 값을 지정합니다.
선택 방법
어떤 방법을 사용할지는 상황에 따라 다릅니다.
- 간단하고 직접적인 방법을 원한다면 직접 URL을 생성하는 방법을 사용하십시오.
- URL 이름을 사용하여 코드를 더 명확하고 유지 관리하기 쉽게 만들고 싶다면 URL 이름을 사용하는 방법을 사용하십시오.
- 더 많은 유연성이 필요하다면
reverse
함수나kwargs
매개 변수를 사용하십시오.
django django-templates