<p>我找到了这个优雅的解决方案,对于django 1.5或更高版本,正如<a href="http://reinout.vanrees.org/weblog/2014/05/19/context.html" rel="nofollow noreferrer">here</a>:</p>
<blockquote>
<p>Django’s generic class based views now automatically include a view
variable in the context. This variable points at your view object.</p>
</blockquote>
<p>在您的视图中.py:</p>
<pre><code>from django.views.generic.base import TemplateView
class Yearly(TemplateView):
template_name = "calendars/yearly.html"
# Not here
current_year = datetime.datetime.now().year
current_month = datetime.datetime.now().month
# dispatch is called when the class instance loads
def dispatch(self, request, *args, **kwargs):
self.year = kwargs.get('year', "any_default")
# other code
# needed to have an HttpResponse
return super(Yearly, self).dispatch(request, *args, **kwargs)
</code></pre>
<p>此<a href="https://stackoverflow.com/a/11448882/5476782">question</a>中找到的调度解决方案。<br/>
由于<a href="https://docs.djangoproject.com/en/1.9/topics/http/views/" rel="nofollow noreferrer">view</a>已经在模板上下文中传递,因此您不必担心它。在模板文件yearly.html中,可以通过以下方法访问这些视图属性:</p>
<pre><code>{{ view.year }}
{{ view.current_year }}
{{ view.current_month }}
</code></pre>
<p>您可以保持urlconf的原样。</p>
<p>值得一提的是,在模板的上下文中获取信息会覆盖get_context_data(),因此它在某种程度上破坏了django的<em>操作bean</em>流。</p>