Bạn không thể truy cập trực tiếp verbose_name từ mẫu. Từ những gì tôi thấy bạn có ba lựa chọn.
Tùy chọn một (đơn giản nhất). Gán tên tiết trong điều khiển của bạn và sau đó truy cập nó từ mẫu:
# in controller
render_to_response('template.html', {'scrib_verbose_name': Scrib._meta.verbose_name})
# in a view template.html
Verbose name of a Scrib model: {{ scrib_verbose_name }}
Lựa chọn hai: viết cho mình một helper điểm cho rằng sẽ trả lại verbose_name (hoặc lĩnh vực khác từ lớp _meta) cho một lớp nhất định.
Cập nhật Tùy chọn thứ ba (mẹo để Uku Loskit) - xác định phương thức trên mô hình scrib trả về đối tượng meta (hoặc bất kỳ trường cụ thể nào từ nó).
# method in a Scrib model
def meta(self):
return self._meta
# later on in a template - scrib is a instance of Scrib model
<h1>{{ scrib.meta.verbose_name }}</h1>
Update2 Nếu bạn nhấn mạnh vào trực tiếp truy cập vào tên verbose từ scribs
(mà là một kết quả của Scrib.objects.all()
), sau đó bạn có thể làm những thứ như:
scribs = Scrib.objects.all()
scribs.verbose_name = Scrib._meta.verbose_name
# in a template you can now access verbose name from a scribs variable
{{ scribs.verbose_name }}
UPDATE3 Tuy nhiên, một cách khác để đi là sử dụng mô hình inhertinace để có thể truy cập tên tiết từ ví dụ của bất kỳ mô hình nào được kế thừa từ mô hình tùy chỉnh của chúng tôi.
# base model (inherits from models.Model)
class CustomModel(models.Model):
def meta(self):
return self._meta
class Meta:
abstract = True
# Scrib now inherit from CustomModel
class Scrib(CustomModel):
# do any stuff you want here ...
Scrib nay kế thừa từ CustomModel đó cho chúng ta sở hữu meta. Bất kỳ mô hình nào sẽ kế thừa từ lớp CustomModel sẽ có thuộc tính này. Đó là giải pháp sạch và linh hoạt nhất.
trên thực tế 'scribs' là t bình đẳng o 'Scrib.objects.all()' vì vậy nó là một đối tượng đa. Tôi có phải đặt 'Scrib' thay vì' Scrib.objects.all() 'vào 'scribs'? –
Vâng, nếu bạn lặp lại mẫu của bạn thông qua các bản ghi chép thì bạn có thể sử dụng '.meta.verbose_name' trên mọi thể hiện của bản ghi chép trong một vòng lặp. Nếu bạn muốn hiển thị nó chỉ một lần (trước khi thực tế looping ví dụ), bạn có thể làm chỉ đơn giản là '{{scribs.0.meta.verbose_name}}' để hiển thị một tên tiết bằng cách sử dụng scribs đầu tiên trong một mảng scribs. – WTK
Tôi không thể trực tiếp đưa mô hình 'Scrib' vào 'scribs', lặp lại' scribs.objects.all' và sử dụng' scribs.verbose_name' hoặc một cái gì đó đơn giản hơn? Nếu không, tôi sẽ phải đặt chức năng này trên tất cả các mô hình của tôi? –