Django에서는 HTML 형식 데이터의 짧은 스 니펫을 넣을 수있는 가장 좋은 곳은 어디입니까?
-
02-07-2019 - |
문제
이 질문은 (아마도 동일하지는 않지만)와 관련이 있습니다.
내 문제는 이것입니다 : Django에서는 저수준 데이터베이스 개체에 대한 기본 형식을 지속적으로 재현하고 있습니다. 예는 다음과 같습니다.
나는 두 개의 수업, 사람과 주소가 있습니다. 각 사람에 대한 여러 주소가 있습니다. Models.py)
class Person(models.Model):
...
class Address(models.Model):
contact = models.ForeignKey(Person)
이제 사람을 볼 때마다 모든 주소를보고 싶습니다. 그러니 가정 해보세요 사람/views.py 뭔가 좋아요 :
def detail(request, person_id):
person = get_object_or_404( Person, pk=person_id )
return render_to_response('persons/details.html',
{ 'title' : unicode(person), 'addresses': person.address_set.all() } )
그리고 템플릿이 있습니다. 사람/세부 사항 .html, 예를 들어 코드와 같은 코드와 함께 :
{% extends "base.html" %}
{% for address in addresses %}
<b>{{ address.name }}</b>
{{ address.type }} <br>
{{ address.street_1 }}<br>
{{ address.street_2 }}<br>
{{ address.city }} {{ address.stateprov }} {{ address.postalcode }}<br>
{{ address.country }}
<hr>
{{ endfor }}
나는이 코드를 테이블에있을 때 경미한 변형으로 종종이 코드를 상당히 반복하고 있으며 <br>을 < /td> <td>로 대체해야합니다. 다른 경우에는 street_2가 표시되기를 원하지 않습니다 (또는 <br> 이후). 말할 것도, 내가 표현하고 싶은 근본적인 논리가 있습니다. 나는 블록 앤 카피와 함께 토트를 더 많이 혐오합니다!
내가 원하는 것은 a 사람/세부 사항 .html 예를 들어 다음과 같이 :
{% extends "base.html" %}
{% for address in addresses %}
{% address.as_html4 %}
{% endfor %}
그리고 인라인 테이블을 원한다면, 어떤 것도 좋아합니다 (추측!) :
{% extends "base.html" %}
<table><tr>
{% for address in addresses %}
<tr><td> {% address.as_html4 </td><td> %} </td></tr>
{% endfor %}
</table>
문제는 다음과 같습니다. 서식을하기에 가장 좋은 곳은 어디입니까? 논리?
Django는 다음과 같은 (그럴듯한) 옵션이있는 것 같습니다.
형식을 Models.py에 넣습니다
로직/서식을 views.py에 넣습니다
다른 서브 클래스의 사람 또는 주소에 논리/서식을 넣습니다 (즉, 주소/html4.py)
사용자 정의 태그를 만듭니다
도움 / 통찰력을 많이 감사합니다!
해결책
an처럼 들립니다 포함 태그 당신이 찾고있는 것입니다. 각 주요 변형에 대한 템플릿과 태그를 가지고 태그의 인수를 사용하여 필요에 따라 각 템플릿의 컨텍스트를 사용자 정의 할 수 있습니다.
기본 태그 정의 :
@register.inclusion_tag('person/address.html')
def display_address(address):
return {'address': address}
템플릿에서 사용 (템플릿이 포함 된 템플릿 모듈이 이미 {% load %}
-ED) :
{% display_address address %}
다른 팁
템플릿 html-file aka를 사용하여 템플릿 태그 데이터 출력 데이터를 사용합니다. 포함-태그
템플릿 필터도 유용 할 것이라고 생각합니다. 예를 들어 각 객체의 필터를 전달할 수 있습니다.
{{ value|linebreaks }} # standard django filter
생산 :
If value is Joel\nis a slug, the output will be <p>Joel<br>is a slug</p>.
보다 Django 내장 템플릿 태그 및 필터 완전한 참조.