Saya baru mengenal Django, dan hari ini ketika saya mencoba menjalankan situs web dengan database, saya menemukan kesalahan ini. Saya telah mencari semua solusi pada dokumen StackOverflow dan Django, tetapi saya tidak dapat memperbaikinya.

Ini adalah masalah yang mirip dengan saya, tetapi tidak berhasil.

Saya ingin membuat tautan yang memindahkan pengguna dari user.html di pengguna ke index.html di warga

Berikut adalah struktur proyek saya. Maaf karena saya tidak dapat melampirkan gambar, jadi saya akan mencoba menjelaskannya dengan cara termudah.

[PROYEK SAYA]

->kelola.py

->warga (folder)

-->templates (di dalam folder ini saya memiliki citizen.html, index.html, layout.html)

-->admin.py

->models.py

->tests.py

-->urls.py

-->views.py

->proyek saya (folder)

-->setting.py

-->urls.py

-->dll yang menurut saya tidak penting

->pengguna (folder)

-->templates (di dalam folder ini saya memiliki login.html, user.html, layout.html)

-->urls.py

-->views.py

-->dll yang menurut saya tidak penting

Seperti yang Anda lihat, saya memiliki user.html di dalam folder templat pengguna, dan index.html di dalam folder templat warga.

Ini kode saya:

index.html di dalam warga negara

{% extends "citizens/layout.html" %}

{% block body %}
    <h1>Hệ thống quản lý XNC</h1>
    
    <table class="table">
        
        <thead>
          <tr>
            <th scope="col">Số TT</th>
            <th scope="col">Họ và tên công dân</th>
            <th scope="col">Giới tính</th>
            <th scope="col">Số Hộ chiếu</th>
            <th scope="col">Chi tiết</th>
          </tr>
        </thead>
        <tbody>
          {% for citizen in citizens %}
          <tr>
            <th scope="row">{{ forloop.counter }}</th>
            <td>{{ citizen.name }}</td>
            <td>{{ citizen.sex }}</td>
            <td>{{ citizen.sID }}</td>
            <td><a href="{% url 'citizen' forloop.counter %}">Truy cập</a></td>
          </tr>
          {% endfor %}
        </tbody>
        
    </table>

    
{% endblock %}

pengguna.html di dalam pengguna

{% extends "users/layout.html" %}

{% block body %}

    <h1>Chào mừng, {{ request.user.username }}</h1>

    <ul>
        <li>Username: {{request.user.username }}</li>
    </ul>
    <a href="{% url 'citizen:citizens/' %}">Truy cập Cơ sở dữ liệu</a>
        
{% endblock %}

urls.py di dalam warga negara

from django.urls import path

from . import views

urlpatterns = [
    path("", views.index, name="index"),
    path("<int:citizen_id>", views.citizen, name="citizen"),
    #path("<int:citizen_id>/passports", views.passport, name="passports")
]
    

views.py di dalam warga

from django.shortcuts import render
from django.http import HttpResponseBadRequest, HttpResponseRedirect, Http404
from django.urls import reverse

from .models import Citizen 

# Create your views here.
def index(request):
    return render(request, "citizens/index.html", {
        "citizens": Citizen.objects.all()
    })

def citizen(request, citizen_id):
    try:
        citizen = Citizen.objects.get(sID=citizen_id)
    except Citizen.DoesNotExist:
        raise Http404("Citizen not found")
    return render(request, "citizens/citizen.html", {
        "citizen": citizen,
        
        
    })


urls.py di dalam proyek saya

"""htql2 URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('citizens/', include('citizens.urls')),
    path('accounts/', include('django.contrib.auth.urls')),
    path('users/', include('users.urls')),
]

urls.py di dalam pengguna

from django.urls import path

from . import views

urlpatterns = [
    path("", views.index, name="index"),
    path("login", views.login_view, name="login"),
    path("logout", views.logout_view, name="logout"),
    
]
    

views.py di dalam pengguna

from django.views.decorators.csrf import csrf_exempt
from django.contrib.auth import authenticate, login, logout
from django.shortcuts import render
from django.http import HttpResponseBadRequest, HttpResponseRedirect, Http404
from django.urls import reverse

@csrf_exempt

# Create your views here.
def index(request):
    if not request.user.is_authenticated:
        return HttpResponseRedirect(reverse("login"))
    return render(request, "users/user.html")    

def login_view(request):
    if request.method == "POST":
        username = request.POST["username"]
        password = request.POST["password"]
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return HttpResponseRedirect(reverse("index"))
        else:
            return render(request, "users/login.html", {
                "message": "Invalid credentials."
            }) 
    else:
        return render(request, "users/login.html")        

def logout_view(request):
    pass

Di dalam user.html, saya telah mencoba menggunakan

<a href="{% url 'citizen:citizens/' %}">Go to Database</a>

Tapi tidak bekerja.

Terima kasih. Saya sangat bersyukur.

0
hoangphi01 12 Mei 2021, 15:58

1 menjawab

Jawaban Terbaik

Anda telah mencoba menggunakan {% url 'citizen:citizens/' %} di sini bagian sebelum : (citizen) adalah namespace url dan bagian setelahnya (citizens) adalah nama url. Tetapi Anda belum pernah menggunakan namespace apa pun, dan Anda juga tidak memiliki nama url sebagai citizens.

Anda dapat menambahkan namespace di citizens.urls dengan menentukan app_name:

from django.urls import path

from . import views

app_name = 'citizens' # here
urlpatterns = [
    path("", views.index, name="index"),
    path("<int:citizen_id>", views.citizen, name="citizen"),
    #path("<int:citizen_id>/passports", views.passport, name="passports")
]

Selanjutnya Anda perlu menulis tag url sebagai {% url 'citizens:index' %}:

<a href="{% url 'citizens:index' %}">Go to Database</a>
1
Abdul Aziz Barkat 12 Mei 2021, 13:16