通过django从mySQL服务器获取内容到网页的问题

时间:2018-06-14 19:29:46

标签: python mysql django

这是我第一次使用mySQL和django,我在从服务器获取内容并在我的网页上显示时遇到了一些问题。 这是我的代码: 这是index.html

{% extends 'test/layout.html' %}

{% block content %}
<hr>
<br>
<h1 class="container center-align">{{title}}</h1>
<br>
<h3 class="center-align blue lighten-3">Webpages</h3>
<ul class="collection">
    {% for homes in homes %}
      <li class="collection-item"><a href="test/details.html">{{homes.title}}</a></li>
    {% endfor %}
</ul>
{% endblock %}

views.py

from django.shortcuts import render
from django.http import HttpResponse
from .models import Home

def index(request):

    homes = Home.objects.all()[:10]

    context = {
        'title': 'All Home',
        'homes': homes
    }

    return render(request, 'test/index.html', context)


def details(request, id):
    home = Home.objects.get(id=id)

    context = {
    'Home': home
    }

    return render(request, 'test/details.html', context)

urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'', views.index, name='index'),
    url(r'details/(?P<id>\d+)/', views.details, name='details')
]

models.py

from django.db import models
from datetime import datetime

class Home(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()
    created_at = models.DateTimeField(default=datetime.now, blank=True)

    def __str__(self):
        return self.title

    class Meta:
        verbose_name_plural = "Home"

details.html

{% extends 'test/layout.html' %}

{% block content %}
<hr>
<br>
<h1 class="container center-align">{{home.title}}</h1>
<br>
<div class="card">
    <div class="card-content">
        {{home.body}}
    </div>
    <div class="card-action">
        {{created_at}}
    </div>
</div>
<a href="/test" class="btn">Go Back</a>
{% endblock %}

问题是,当我点击我网页上的链接时,带有服务器文本格式的details.html文件不会显示。相反主页显示(index.html),但现在在不同的URL下。(主页上的普通网址:localhost:8000,新网址:localhost:8000 / test / details.html) 我认为问题出在urls.py文件中,但我不确定。 希望任何人都可以提供帮助。

编辑: 我的文件夹

testdjango
|
|--testdjango(all the normal project files are in here)
|--test
|    |--__pycache__
|    |--migrations
|    |--templates
|    |    |--test
|    |        |--detalils.html
|    |        |--index.html
|    |        |--layout.html
|    |
|    |--__init__.py
|    |--admin.py
|    |--apps.py
|    |--models.py
|    |--tests.py
|    |--urls.py
|    |--views.py
|
|--db.sqlite3
|-- manage.py

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。

我会选择我第一眼看到的那些。

为您的urls.py文件

添加名称空间
from django.conf.urls import url
from . import views

app_name = 'something_meaningful'

urlpatterns = [
    url(r'', views.index, name='index'),
    url(r'details/(?P<id>\d+)/', views.details, name='details')
]

然后代替,硬编码网址(你也做错了),试试。

<li class="collection-item">
    <a href="{% url 'something_meaningful: details' id=home.id %}">{{ home.title }}</a>
</li>

对于伟大的上帝,不要对序列和迭代器实例使用相同的变量名。

{% for home in homes %}
   # ul>li block above 
{% endfor %}

另外你应该更好地改变details这样的功能(pk更通用)。

def details(request, id=None):
    home = Home.objects.get(pk=id)

    context = {
    'Home': home
    }

    return render(request, 'test/details.html', context)

请在完成这些更改后提供反馈。