包含块未在django模板中显示

时间:2015-10-20 18:16:32

标签: javascript python html django django-models

嗯,我设计了一些东西,但我不确定,如何实施 它

models.py

class Notificaciones(models.Model):
 IDcliente = models.ManyToManyField(User)
 Tipo_de_notificaciones = ( (1,'Ofertas'),(2,'Error'),(3,'Informacion'))
 Tipo = models.IntegerField('Tipo de notificacion',choices=Tipo_de_notificaciones, default=3,)
 Nombre_not = models.CharField("Nombre de la notifiacion",max_length=50)
 Descripcion_not = HTMLField("Descripcion de la notificacion")
 Imagen_not = models.ImageField("Imagen de la notificacion",upload_to="notificaciones")
 Fecha_Caducidad_notificacion = models.DateTimeField("Fecha de caducidad de la notificacion",auto_now_add=False)
 class Meta:
     verbose_name = 'Notificacion'
     verbose_name_plural = 'Notificaciones'
 def __str__(self):
     return self.Nombre_not

views.py

def notifi(request):
 notifi = Notificaciones.objects.all()
 return render_to_response('app/notificaciones.html',{ 'notifi' : notifi })

现在我想在灯箱的标题中显示通知,然后在我的layout.html中调用页眉,页脚等。但是当我打电话通知时,它不会出现。

<div id="notifiaciones" class="notificaciones notificacionesTrans" tabindex="-1" role="dialog" aria-hidden="true" >
    {% include 'app/notificaciones.html' %}
</div>

有人可以解释我是否可以从视图中调用通知,还是应该以其他方式完成?

URL.PY

url(r'^tinymce/', include('tinymce.urls')),
url('', include('django.contrib.auth.urls', namespace='auth')),
url(r'^social/',include('social.apps.django_app.urls', namespace='social')),
#url(r'^s$', 'app.views.CategoriaProductoss', name='servicios'),
#url(r'^s/(?P<id>\d+)$', 'app.views.servicioscategoria', name='servicioscategoria'),
url(r'^notificaciones/$', 'app.views.notifi', name='notificaciones'),
url(r'^media/(?P<path>.*)$','django.views.static.serve', {'document_root':settings.MEDIA_ROOT,}),
url(r'^$', 'django.contrib.auth.views.login',{'template_name':'app/index.html'}, name='Vulpini.co'),
url(r'^$', 'django.contrib.auth.views.logout', name='logout'),
url(r'start$', 'app.views.start', name="start"),
url(r'ajax-upload$', 'app.views.import_uploader', name="my_ajax_upload"),

# Uncomment the admin/doc line below to enable admin documentation:
 url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

# Uncomment the next line to enable the admin:
 url(r'^admin/', include(admin.site.urls)),

Notificación.html

<ul>
{% for  notifi in notifi %}
    <li>{{ notifi.Tipo }}
        {{ notifi.Nombre_not }}
        <img src="{{ notifi.Imagen_not }}" alt="{{ notifi.Nombre_not }}"/>
        {{ notifi.Fecha_Caducidad_notificacion }}
    </li>
{% endfor %}
</ul>

在layout.html内登录表单

<form action="/login" class="form-horizontal" method="post">
                                {% csrf_token %}
                                <h4>Iniciar Sesion.</h4>
                                <hr />
                                <div class="login-social">                     
                                       <a href="{% url 'social:begin' 'facebook' %}?next={{ request.path }}" target="iframe">Iniciar sesion con Facebook</a>           
                                       <a href="{% url 'social:begin' 'twitter' %}?next={{ request.path }}" target="iframe">Iniciar sesion con Twitter</a>

                                </div>
                                <hr />
                                <div class="form-group">
                                    <label class="control-label" for="inputEmail">Usuario</label>
                                    <div class="controls">
                                        <input name="username" type="text" id="inputEmail" placeholder="Usuario"/>
                                    </div>
                                </div>
                                <div class="form-group">
                                    <label class="control-label" for="inputPassword">Contraseña</label>
                                    <div class="controls">
                                        <input name="password" type="password" id="inputPassword" placeholder="Contraseña"/>
                                    </div>
                                </div>
                                <div class="form-group">
                                    <label class="checkbox">
                                    <input type="checkbox" />Recordar</label>
                                    <button type="submit" class="btn btn-info">Ingresar</button>
                                    <a href="/">Registrar</a>
                                </div>
                            </form>

2 个答案:

答案 0 :(得分:0)

问题是,django.contrib.auth.views.login是呈现index.html页面的内容(从这里可以看到):

url(r'^$', 'django.contrib.auth.views.login',{'template_name':'app/index.html'}, name='Vulpini.co'),

index.html页面扩展了layout.html,layout.html包含了notificaciones.html。这些模板决不会通过“通知”。变量(这就是为什么没有显示 - 因为django.contrib.auth.views.login没有将任何&#39; notifi&#39变量传递给你的模板)。为了完成您想要的操作,请将URL更改为:

url(r'^$', 'app.views.index', name='Vulpini.co'),

然后在views.py中添加此视图:

def index(request):
 notifi = Notificaciones.objects.all()
 return render_to_response('app/index.html',{ 'notifi' : notifi })

完成此操作后,index.html(扩展layout.html,调用notificaciones.html)将可以访问&#39; notifi&#39;变量。然后在index.html模板中,您可以将表单发布到&#34; / login&#34;它使用django.contrib.auth.view.login,如下所示:

url(r'^login$', 'django.contrib.auth.views.login', name='Vulpini.co'),

并在您的settings.py中设置:

LOGIN_REDIRECT_URL = '/'

登录后重定向回index.html页面。

编辑:由于这是已核对的答案,我想指出另一个选项(正如chem1st在他的回答中所说),将在这里查看上下文处理器:https://docs.djangoproject.com/en/1.7/ref/templates/api/#writing-your-own-context-processors

查看chem1st的答案以获取更多信息。

答案 1 :(得分:0)

包含和扩展块不会将数据从视图传递到模板。如果您希望能够从视图中获取smth,请明确传递它。

您还应该查看context processors,因为它们可以让您在全球范围内获得所需的数据。