0

我在views.py中定义了两个函数来获取第一个带有特定elementimenu的prova.html ,然后,在单击其中一个之后,我再次获得了与具有相同id的elementimenu关联的elementimenuelementi的页面,即:

another_app.model.py

...
class ElementiTab(models.Model):
    author = models.ForeignKey('auth.User', null=True, blank=False)
    des = models.CharField(max_length=30)
    x = models.FloatField()
    y = models.FloatField()
    res = models.FloatField(default=0)
    created_date = models.DateTimeField(default=timezone.now)
...

这里是我希望变得更好的代码:

视图.py

from another_app.model import ElementiTab

def show_elementi(request):
        elementimenu = ElementiTab.objects.all()
        return render_to_response('homepage/prova.html',{'elementimenu': elementimenu, 'user.username': request}, context_instance = RequestContext(request))


def show_detail(request,id):
        elementimenu = ElementiTab.objects.all()
        detail = get_object_or_404(ElementiTab, pk=id)
        return render_to_response('homepage/prova.html',{'elementimenu': elementimenu, 'detail': detail, 'user.username': request}, context_instance = RequestContext(request))

网址.py

...
      url(r'^homepage/prova/$', views.show_elementi),
      url(r'^show_detail/(?P<id>\d+)/$', views.show_detail),
...

prova.html

...

    <div class="elementi">
    {% for elementi in elementimenu %}  
    <a href="/show_detail/{{elementi.id}}">{{elementi.des}}</a>
    {% endfor %}
    </div>


                        <div class="table-responsive">
                            <table class="table table-bordered">
                                <tr class="info">
                                <td width="35%" align="center"> NOME</td>
                                <td width="35%" align="center"> DATA CREAZIONE </td>
                                <td width="30%" align="center"> AUTORE </td>
                                </tr>
                                {% if detail %}
                                    <div class="dettagli">
                                        <tr>

                                        <td>{{detail.des}}</td> 
                                        <td>{{detail.created_date}}</td>
                                        <td>{{detail.author}}</td>                          
                                        </tr>
                                {% endif %}  

                                    </div>

                            </table>
                        </div>
    ...

我在show_detail视图中使用了这个“技巧”,这样即使在调用这个函数之后我也可以看到elementimenu 。

有没有更优雅的方法来做到这一点?

4

1 回答 1

1

是的,您可以使用单一视图。为(or ) 参数添加默认None值:idpk

def show_elementi(request, pk=None):
    elementimenu = ElementiTab.objects.all()
    detail = get_object_or_404(ElementiTab, pk=pk) if pk else None
    return render(request, 'homepage/prova.html',
                  {'elementimenu': elementimenu, 'detail': detail})

然后将两个 url 映射到这个视图:

url(r'^homepage/prova/$', views.show_elementi),
url(r'^show_detail/(?P<pk>\d+)/$', views.show_elementi),
于 2015-03-13T22:54:34.797 回答