Django에서는 HTML 형식 데이터의 짧은 스 니펫을 넣을 수있는 가장 좋은 곳은 어디입니까?

StackOverflow https://stackoverflow.com/questions/146789

문제

이 질문은 (아마도 동일하지는 않지만)와 관련이 있습니다.

Django에는 HTML 도우미가 있습니까?

내 문제는 이것입니다 : 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는 다음과 같은 (그럴듯한) 옵션이있는 것 같습니다.

  1. 형식을 Models.py에 넣습니다

  2. 로직/서식을 views.py에 넣습니다

  3. 다른 서브 클래스의 사람 또는 주소에 논리/서식을 넣습니다 (즉, 주소/html4.py)

  4. 사용자 정의 태그를 만듭니다

도움 / 통찰력을 많이 감사합니다!

도움이 되었습니까?

해결책

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 내장 템플릿 태그 및 필터 완전한 참조.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top