我有一个模特
class MyModel(models.Model):
slug = models.UUIDField(default=uuid4, blank=True, editable=False)
advertiser = models.ForeignKey(Advertiser)
position = models.SmallIntegerField(choices=POSITION_CHOICES)
share_type = models.CharField(max_length=80)
country = CountryField(countries=MyCountries, default='DE')
# some other Fields. Edited in a ModelForm
此视图由包含位置,share_type,country作为参数的url调用。我想在模板中显示这些参数。做这个的最好方式是什么。我已经有了这些可能性
1)使用get_context_date并将其存储在上下文
中 def get_context_data(self, **kwargs):
ctx = super(MyModel, self).get_context_data(**kwargs)
ctx['share_type'] = self.kwargs.get('share_type', None)
ctx['country'] = self.kwargs.get('country', None)
ctx['postal_code'] = self.kwargs.get('postal_code', None)
ctx['position'] = int(self.kwargs.get('position', None))
return ctx
然后可以在模板中使用
2)使用视图变体
def share_type(self):
ret = self.kwargs.get('share_type', None)
return ret
def country(self):
ret = self.kwargs.get('country', None)
return ret
喜欢
<div class="row">
<strong>
<div class="col-sm-3">
Type : {{ view.share_type }}
<div class="col-sm-3">
Country : {{ view.country }}
我认为两种方式都有些多余。有没有人知道更通用的方法。
亲切的问候
迈克尔
答案 0 :(得分:0)
我认为最好的方法是这样做:
def dispatch(self, request, *args, **kwargs):
self.share_type = self.kwargs.get('share_type', None)
self.country = self.kwargs.get('country', None)
self.postal_code = self.kwargs.get('postal_code', None)
self.position = int(self.kwargs.get('position', None))
self.position_verbose = verbose_position(self.position)
ret = super(CreateAdvertisment, self).dispatch(request, *args, **kwargs)
return ret
您可以在form_valid方法中使用then
def form_valid(self, form):
form.instance.advertiser = self.advertiser
form.instance.share_type = self.share_type
form.instance.country = self.country
form.instance.postal_code = self.postal_code
form.instance.position = self.position
ret = super(CreateAdvertisment, self).form_valid(form)
return ret
当然在模板中
<strong>
<div class="col-sm-3">
Typ : {{ view.share_type }}
</div>
<div class="col-sm-3">
PLZ : {{ view.postal_code }}
</div>
<div class="col-sm-3">
Ort : TODO
</div>
<div class="col-sm-3">
Pos : {{ view.position_verbose }}
</div>
非常感谢这些建议。
此致
迈克尔