python - 在模板中使用 DjangoFramework 时出错

标签 python django templates django-templates frameworks

这里是开发人员的新尝试。

我正在尝试制作一个项目,但我已经遇到了一些我不知道为什么不起作用的问题...我放置了我的代码并解释了它...

url.py

app_name = 'opotest'

urlpatterns = [
    url(r'^$', views.indexView, name='index'),
    url(r'^inicio/$', views.ListaView.as_view(), name='inicio'),
    url(r'^test/(?P<tipo>.+)/$', views.TestList.as_view(), name='test'),    
    url(r'^test/(?P<tipo>.+)/run/$',
        views.TestDetail.as_view(), name='run'),  # this one  

查看.py

class TestDetail(generic.DetailView):
    model = Pregunta
    context_object_name = 'lista'

    def get_queryset(self):
        return Pregunta.objects.all()

HTML 模板

{% for test in lista  %}

    <br/>
    <p>Pregunta: {{ pregunta.textopregunta }}</p>

{% endfor %}

模型.py

class Pregunta(models.Model):
    id = models.AutoField(primary_key=True)
    textopregunta = models.CharField('Texto pregunta', max_length=1000)
    test = models.ForeignKey(Test, on_delete=models.CASCADE)

    def __str__(self):
        return self.textopregunta   

这段代码应该给我带来一些我已经创建的“pregunta”,但它不起作用......你能告诉我我做错了什么吗? for Bring me

Pregunta:

textopregunta 没有出现...

谢谢大家

D...

最佳答案

应该是

{% for test in lista  %}

    <br/>
    <p>Pregunta: {{ test.textopregunta }}</p>

{% endfor %}

可以工作,

但无论如何,如果您想使用 Pregunta.objects.all() ,则必须使用 ListView,而不是 DetailView。像这样

class TestList(generic.ListView):
    model = Pregunta
    context_object_name = 'lista'

{% for test in lista  %}

    <br/>
    <p>Pregunta: {{ test.textopregunta }}</p>

{% endfor %}

更新

如果您想列出所有模型对象,请使用ListView

1。将 View 更改为 ListView

class TestList(generic.ListView):
    model = Pregunta
    context_object_name = 'lista'

然后您可以在 tempalte 中使用 objectslista

2。更改您的网址

如果是 ListView ,则 url 中不需要 tipo

urlpatterns = [
    url(r'^$', views.indexView, name='index'),
    url(r'^inicio/$', views.ListaView.as_view(), name='inicio'),
    url(r'^test/(?P<tipo>.+)/$', views.TestList.as_view(), name='test'),    
    url(r'^test/run/$',
        views.TestList.as_view(), name='run'),  # this one  

3。在模板中使用 objectslista

因为您在 context_object_name 中定义了 lista :这意味着您的对象列表将与模板中的 lista 一起使用。 (您可以使用objects,因为django ListView会自动为您创建上下文)

{% for test in lista  %}

    <br/>
    <p>Pregunta: {{ test.textopregunta }}</p>

{% endfor %}

详细 View 更新

1。使用 pk 更改 url

最重要的是,您必须了解View - Templateurl

在您的网址中 - 您应该传递您想要用来 grep 一个特定对象的参数。它应该是唯一的,所以只需使用pk(id)。 (或者您可以制作自己独特的鼻涕虫)

    url(r'^test/run/$',
        views.TestList.as_view(), name='run'),  # this one  
    # this is DetailView
    url(r'^test/(?P<pk>\d+)/$',
        views.TestDetail.as_view(), name='run'),  # this one  

那么你的网址将是..test/1/test/2/

2。更改 View

实际上,django CBV支持很多函数(方法),所以你不必处理更多,但很难理解。

class TestDetail(generic.DetailView):
    model = Pregunta
    context_object_name = 'lista'

当您不了解 DetailView 时,您就会感到困惑。

DetailView 中,(如您所见 here-ccbv.co.kr )它有 get_object() 方法。如果您的 View 中定义了任何url_kwargs,它将使用pk作为基本。因此它会发现类似 Pregunta.objects.get(id=self.kwargs.get(pk)) 的内容来自您的 urls.py

然后您可以在模板中使用您的对象,使用listaobject

    <br/>
    <p>Pregunta: {{ lista.textopregunta }}</p>

您不必 forloop 所有对象(实际上不能),因为 DetailView 基本上从您的 kwargs 中找到您的对象(在这种情况下,pk )。

我强烈建议阅读 django 文档 (CBV) 并查看 ccbv.co.kr用于理解 CBV,或尝试在 django 中使用 FBV。

关于python - 在模板中使用 DjangoFramework 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50267803/

相关文章:

python - 最快/最有效的文本和 float 数据存储格式

python - 为什么我的 for 循环只捕获 699 的 y 值而不是从 0 到 699 的值?

c++ - 从构造函数参数推断 std::set 的 Compare 类型

c++ - 我可以告诉我的类是从哪个模板实例类继承的吗?

javascript - 在 Django 项目中使用 JavaScript 的最合适的方式是什么?

c++ - 在函数参数中使用限定名称

python - Pandas:从互斥选择的多列中获取一行中特定单个值的列索引/标签

python - 获取 pandas 数据帧的每一行和每一列中字符串出现的次数

python - Django Rest 框架 - 从 json 创建或更新值

django - 与 Django Channels 的 React native Websocket 连接已打开,但没有消息通过