0

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

node = '127.0.0.1'

我将 IP 地址存储在模型中,所以我的问题是如何使用模型中的数据和 url 中的捕获值在视图中设置“节点”变量?

编辑 - 这是目前的模型,让我知道它是否应该以不同的方式完成。

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

    def __unicode__(self):
            return self.name

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

4

2 回答 2

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_kwargorpk_url_kwarg设置来做到这一点。

于 2013-06-05T19:53:44.560 回答
0

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

与彼得的答案类似,您的 URL 看起来像

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.
于 2013-06-05T20:24:02.607 回答