Django - 在视图中变量

时间:2013-06-05 19:43:48

标签: django

我是Django的新手,所以这看起来很明显,但我无法弄明白这一点。我有一个需要IP地址来执行各种操作的视图。当我在视图中手动指定IP地址时,它可以正常工作:

node = '127.0.0.1'

我有一个存储在模型中的IP地址,所以我的问题是我如何使用模型中的数据和来自网址的捕获值在视图中设置“node”变量?

编辑 - 这是当前的模型,请告诉我是否应该采用不同的方式。

   class Server(models.Model):
    name = models.CharField(max_length=30)
    ip = models.IPAddressField('IP Address')

    def __unicode__(self):
            return self.name

因此,“name”将是url中捕获的值,然后使用捕获的值找到“ip”。当然,如果有更好的方法,请告诉我。

2 个答案:

答案 0 :(得分:0)

在URL中加入某种标识符(我通常只使用模型的PK),获取对象,然后随意使用它。

这样的事情:

在urls.py中:

...
url(r'^item_detail/(?P<item_id>\d+)/$', 'my_viewname', name='my_item_detail'),
...

对于视图:

from django.shortcuts import get_object_or_404

def my_viewname(request, item_id):
    my_item = get_object_or_404(MyModel, pk=int(item_id))
    node = my_item.node
    ...

如果您使用的是基于类的通用视图,DetailView或从SingleObjectMixin继承的任何内容都可以使用slug_url_kwargpk_url_kwarg设置执行此操作。

答案 1 :(得分:0)

听起来你想要在显示服务器信息的页面上做一些事情,包括IP(大概,如果你能做到这一点,你可以使用ip来做任何你想要做的事情)。

与peter的答案类似,您的网址看起来像

url(r'^server_info/(?P<server_name>\w+)/$', 'server_info_view', name='server_info'),

在视图中

from django.shortcuts import get_object_or_404

def server_info_view(request, server_name):
    server = get_object_or_404(Server, name=server_name)
    node = server.ip
    # Keep in mind, at this point 'node' is a django.models.IPAddressField object, you might need
    node = str(node)
    # Which should get you an IP in the format you have above, though I'm not sure.