我有一个template_tag.py:
from django import template
from myapp.views import RenderView
register = template.Library()
@register.inclusion_tag("template_tag.html")
def render_myapp():
rv=RenderView()
return rv.get_context_data()
和myapp.views.py:
from django.views.generic.base import TemplateView
class RenderView(TemplateView):
template_name = "test.html"
def get_context_data(self, **kwargs):
context = super(RenderView, self).get_context_data(**kwargs)
context["test"] = 1 # this is hit twice in the debugger
return context
template_tag.html:
{% if test %}
{{ test|safe }}
{% endif %}
base.html(其他应用):
{% load template_tag %}
{% render_myapp %}
我想知道为什么RenderView().get_context_data()
在调试器中被击中两次?我在模板中没有两次调用它。这可能是因为TemplateView
已经调用了get_context_data,然后我再次调用它rv.get_context_data()
。但那么我的template_tag.py
应该怎么样才不再调用get_context_data()?
答案 0 :(得分:2)
这里似乎有两种情况。
在一种情况下,模板标记始终位于由RenderView呈现的模板中。在这种情况下,似乎不需要标签;您应该只包含template_tag.html或将其代码直接放入test.html。
在另一种情况下,标记位于另一个模板中,或者在RenderView可能呈现或不呈现的一系列模板中。在这种情况下,为什么在RenderView中定义该页面的上下文数据?它应该直接在const Tabs = TabNavigator({
Feed: {
screen: FeedPage,
navigationOptions: {
tabBarLabel:"Feed",
tabBarIcon: () => (<Image source={require('./Resources/Images/TabBar Icons_Feed.png')} style={{height: 10, width: 10}} />)
}
},
Me: {
screen: MePage,
navigationOptions: {
tabBarLabel:"Me",
}
},
},
{
initialRouteName: 'Me',
tabBarOptions: {
showIcon: true,
showLabel: true
}
}
);
const RootStack = StackNavigator(
{
//All Tabs
Tabs: {
screen: Tabs,
},
//Other Pages
Signup: {
screen: SignupPage,
},
ProfilePicUploader: {
screen: ProfilePicUploaderPage,
},
Login: {
screen: LoginPage,
},
User: {
screen: UserPage,
},
EasterEgg: {
screen: EasterEggPage,
},
},
{
initialRouteName: 'Tabs',
headerMode: 'none'
}
);
export default class App extends Component<Props> {
render() {
return (
<RootStack/>
);
}
}
。