如何在Django-python中从views.py传递值到定义的模板

时间:2012-03-23 11:56:30

标签: python django django-templates django-views

我有一个这样的模型:

class EventTypeCategory(models.Model):
    name = models.CharField(max_length=50, verbose_name="Name")
    user = models.ForeignKey(User, verbose_name="User")
    Message_slug = models.SlugField(blank=True, verbose_name="Message")

       def __unicode__(self):
           return self.name

在urls.py中:

url(r'^categ/$',
    'eventcateg_detail', name='eventcateg_detail'),

在views.py中:

def eventcateg_detail(request,event_categ_id=None, event_categ_slug=None):

我想按模板级别添加/编辑/删除(CRUD)定义的值,即name和Message_slug。我没有得到任何提示如何将url.py与views.py联系起来以及eventcateg_detail函数的定义应该是什么。该函数如何将值传递给模板(模板名称将为categ.html)

我是Django的新手:) 希望得到你的帮助

3 个答案:

答案 0 :(得分:3)

您需要允许URL接受参数,以允许您指定要查看的事件类别:

/categ/outdoor-events/
/categ/catered-events/ 
...

这样做,您在网址方案中使用a named URL pattern

url(r'^categ/(?P<slug>[-\w]+)/$','eventcateg_detail', name='eventcateg_detail'),

并在您看来:

from django.shortcuts import get_object_or_404, render
def eventcateg_detail(request,slug):
    return render(request, "categ.html", {
        'obj' : get_object_or_404(EventCateg, Message_slug =slug) # You should change Message_slug to just slug
    })

并在您的模板中:

<h1>{{ obj.name }}</h1>

因此,当用户输入如上所述的URL时,它会与我们的URL模式匹配,并且url(catered-events)的slug部分会作为参数传递给我们的视图。

答案 1 :(得分:2)

最好先遵循Django教程,这一切都在那里。有关如何将urls.py与views.py相关联的更多信息,请参阅教程的part 3part 4讨论将变量传递给模板。

答案 2 :(得分:0)

相信一个视图函数只在Django框架调用时传递了一个httprequest,该函数的其他两个参数只有在你自己调用函数时才有用但通过网络无效。

正如评论中指出的那样,我错误地认为,额外的参数可以作为动态网址传递(即指定为此url(r'^polls/(?P<poll_id>\d+)/$', 'polls.views.detail')的网址)。请参阅此link以及@pastylegs的答案

Django Admin将允许您编辑所有模型字段,如果这是您所追求的。有关设置的说明,请参阅Django文档。

但是,我认为您要问的是如何通过网络向非管理员级用户启用CRUD编辑。在这种情况下,你有很多选择。其中一个选择是为Django使用预构建的框架,如piston。另一种方法是使用generic views

另一种选择是自己构建视图,以便在模型上启用操作。在这种情况下,所有Django都可供您使用。您可以将参数传递给 httprequest中的自定义函数,例如作为POST数据。