<p>请注意,<strong>这不是构建用于访问特定对象的URL的常用方法。下面我首先介绍在URI中集成<code>pk</code>的方法,然后介绍将<code>pk</code>作为参数传递的方法。在</p>
<hr/>
<p><strong>1。方法</strong></p>
<p>在这里,您将<code>pk</code>放在URI中,并请求类似于<code>http://localhost:8000/homesite/viewstatus/1/</code>的内容。如果你这样做,你需要调整你的网址.py通过指定URI的哪一部分是您想要的<code>pk</code>:</p>
<pre><code># urls.py
url(r'^viewstatus/(?P<pk>\d+)/$', views.view_status, name='ViewStatus'),
</code></pre>
<p>你写风景的方式很好:</p>
^{pr2}$
<p>现在,<code>views.view_status</code>将被调用,同时使用<code>request</code>对象和<code>pk</code>作为参数,<code>objects.get</code>将按您预期的方式工作,如果您放入URI中的pk存在于数据库中。在</p>
<p>请注意,这是获取对象的首选方法。在</p>
<hr/>
<p><strong>2。方法</strong></p>
<p>在本例中,您将<code>pk</code>作为参数传递,例如,调用<code>http://localhost:8000/homesite/viewstatus/?pk=1</code>。现在,<code>pk</code>是GET请求的一个参数。在这种情况下:</p>
<pre><code># urls.py
url(r'^viewstatus/$', views.view_status, name='ViewStatus'),
</code></pre>
<p>视图只接受<code>request</code>对象作为参数。在视图中,您可以获得如下pk:</p>
<pre><code>def view_status(request):
pk = request.GET.get('pk', None)
if pk is not None:
device = Devices.objects.get(pk=int(pk))
else:
device = None
return render(request, 'homesite/device_status.html', {'device' : device})
</code></pre>
<p>所以在本例中,除了<code>request</code>对象之外,您的视图不接受任何参数。在</p>
<hr/>
<p>另一个问题是在视图函数中:Django的快捷方式<a href="https://docs.djangoproject.com/en/2.0/topics/http/shortcuts/#render" rel="nofollow noreferrer">^{<cd15>}</a>接受一个<code>dict</code>对象作为可选参数<code>context</code>。当前直接传递设备对象。您需要在<code>view_status</code>中更新返回语句:</p>
<pre><code>return render(request, 'homesite/device_status.html', {'device' : device})
</code></pre>
<p>希望有帮助!在</p>