Django-간단한 사용자 정의 템플릿 태그 예제
내가 가진 사용자 , 비디오 , 주제 , CRITERIAS 및 등급
- 비디오 이 주제를
- 항목 이 CRITERIAS을
- 사용자는 만들 수 있습니다 비디오 주어진에 대한 주제를
- 사용자는 속도 수 비디오를 각각 CRITERIAS 당해 주어진 주제 .
내 원본 게시물 Django-Rating Model Example DetailView Template 에서 사용 된 모델에 대한 세부 정보를 볼 수 있습니다.
비디오 모델을 DetailView
기반으로 템플릿 을 확장하여 특정 사용자에 대해 선택한 비디오에 대한 등급 목록을 추가 컨텍스트 로 넣었습니다 .
class VideoFileDetailView(DetailView):
model = VideoFile
def get_context_data(self, **kwargs):
context = super(VideoFileDetailView, self).get_context_data(**kwargs)
context['rates'] = VideoRate.objects.filter(video=self.object, user=self.request.user)
return context
에 의해 지적 템플릿에서 DetailView
, 나는 나열하고 싶습니다 CRITERIAS 의 비디오를 , 각각에 대한 기준을 현재의 표시 등급 값 형식에게 사용자 .
<div id="rating">
<ul>
{% for crit in videofile.topic.crits.all %}
<li>
{% for rate in rates %}
{% if rate.crit.id == crit.id %}
{{ rate.rate }}
{% endif %}
{% endfor %}
<div class="rateit"
data-rateit-value="{# The rating value #}"
data-rateit-ispreset="true"
crit-id="{{ crit.id }}"></div>
{{ crit }}
</li>
{% endfor %}
</ul>
</div>
( rateit 는 예쁜 별 등급 컨트롤을 그리는 데 사용하는 jquery 플러그인입니다)
실제로 2 차 내에 내 등급 값을 얻지 for
만 더 나은 방법이 있다고 확신합니다. 사실, 여전히 내 모델의 정확성 에 대해 확신하지 못합니다 .
마지막으로 {# The rating value #}
현재 치명타 (루프에서)에 대한 비율의 등급 값 으로 바꾸고 싶습니다 . 어떻게 할 수 있습니까?
다음은 내 솔루션입니다 ( 사용자 정의 태그 기반 ).
먼저 파일 구조를 만듭니다. 태그가 필요한 앱 디렉터리로 이동하고 다음 파일을 추가합니다.
templatetags
templatetags/__init__.py
templatetags/video_tags.py
templatetags / video_tags.py의 파일 :
from django import template
register = template.Library()
@register.simple_tag
def get_rate(crit, rates):
return rates.get(crit=crit).rate
태그 호출이있는 템플릿 부분 :
{% load video_tags %}
<div id="rating">
<ul>
{% for crit in videofile.topic.crits.all %}
<li>
<div class="rateit"
data-rateit-value="{% get_rate crit rates %}"
data-rateit-ispreset="true"
crit-id="{{ crit.id }}"></div>
{{ crit }}
</li>
{% endfor %}
</ul>
</div>
태그의 인라인 HTML
HTML이 작은 경우 별도의 파일을 만드는 것보다이 방법이 더 편리합니다.
이 예에서는 사용자 프로필에 대한 링크를 고려합니다. 파일 templatetags/somemodule.py
에는 다음 이 포함됩니다.
from django import template
from django.template import Template
register = template.Library()
@register.simple_tag(takes_context=True)
def user_link(context):
return Template('<a href="{% url \'user_detail\' ' +
'user.id %}">{{ user.username }}</a>').render(context)
Template#render
이미 XSS 이스케이프되지 않은 안전한 문자열을 반환합니다. 예를 들어 우리가 방금 한 경우 :
return '<br>'
그것은 탈출 할 것입니다. 또한 mark_safe
.
다음을 사용하여 모든보기에서 해당 태그를 사용할 수 있습니다.
TEMPLATES = [
{
'OPTIONS': {
'builtins': [
'myprojectname.templatetags.somemodule',
에서 settings.py
.
See also:
- https://docs.djangoproject.com/en/1.9/howto/custom-template-tags/
- Rendering a template variable as HTML
ReferenceURL : https://stackoverflow.com/questions/6451304/django-simple-custom-template-tag-example
'developer tip' 카테고리의 다른 글
Joda-Time을 사용하여 주어진 달의 일수를 어떻게 얻습니까? (0) | 2021.01.07 |
---|---|
자바에서 큰 따옴표 이스케이프 (0) | 2021.01.07 |
주의 : 정의되지 않은 오프셋 : 0 인치 (0) | 2021.01.07 |
Expression 클래스의 목적은 무엇입니까? (0) | 2021.01.07 |
디버깅하는 동안 Python 목록을 어떻게 호출합니까? (0) | 2021.01.07 |