嗯,我设计了一些东西,但我不确定,如何实施 它
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>
答案 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,因为它们可以让您在全球范围内获得所需的数据。