我将如何为每个主题创建 URL 模式?
Posted
技术标签:
【中文标题】我将如何为每个主题创建 URL 模式?【英文标题】:how I'm gonna create the URL pattern for each topic? 【发布时间】:2022-01-18 21:06:34 【问题描述】:我想为每个主题创建一个 URL 模式。我要怎么做?? 这是我的代码:
models.py
from django.db import models
from django.db import models
class Task(models.Model):
title = models.CharField(max_length=50)
completed = models.BooleanField(default=False)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
urls.py
from django.urls import path
from . import views
app_name = 'my_app'
urlpatterns = [
path('', views.index, name='index'),
path('add_task/', views.add_task, name='add_task'),
]
forms.py 从 django 导入表格 从 .models 导入任务
class TaskForm(forms.ModelForm):
title = forms.CharField(widget=forms.TextInput(attrs='placeholder': 'add new
task...'))
class Meta:
model = Task
fields = '__all__'
views.py
from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import Task
from .forms import TaskForm
def index(request):
task = Task.objects.all()
context = 'task': task
return render(request, 'my_app/index.html', context)
def add_task(request):
if request.method == 'GET':
form = TaskForm()
else:
form = TaskForm(data=request.POST)
if form.is_valid():
form.save()
return redirect('my_app:index')
context = 'form': form
return render(request, 'my_app/add_task.html', context)
base.html
待办事项
% block content %% endblock %
index.html % 扩展 'my_app/base.html' %
% block content %
<p><a href="% url 'my_app:add_task' %">Add task</a></p>
<ul>
% for tasks in task %
<li>
tasks
</li>
% empty %
<li>
<p>There's no task</p>
</li>
% endfor %
</ul>
% endblock %
add_task.html % 扩展 'my_app/base.html' %
% block content %
<p><a href="% url 'my_app:index' %">Index</a></p>
<p>Add task</p>
<a href="% url 'my_app:task' task.id%"> tasks </a>
<form action="% url 'my_app:add_task' %" method="post">
% csrf_token %
form.title
<button type="submit">Add task</button>
</form>
% endblock %
所以我想创建一个待办事项应用程序。我创建了一个表单,但知道我想为每个主题创建 URL 模式。我该怎么做??
【问题讨论】:
您想为每个创建的任务创建一个 URL 模式吗? 是的,我想为创建的每个任务创建 URL 模式 好的,我在下面写了一个完整的答案 【参考方案1】:为数据库中的每个任务添加 URL 的最简单方法是在 url 中使用 <pk>
。 Django 允许您在 url 中传递可以在视图中获取的项目。这是你可以做的:
在网址中:
urlpatterns = [
path('', views.index, name='index'),
path('add_task/', views.add_task, name='add_task'),
path('task-details/<pk>', views.task_detail_view, name='task_detail'),
]
那么在你看来,你可以让 pk 这样做:
def task_detail_view(request, **kwargs):
task_pk = kwargs.get('pk')
task = Task.objects.get(pk=task_pk)
# Perform more logic and render html page...
如果你想在另一个 html 页面中创建一个指向这个页面的链接,你可以这样做:
<a href="% url 'my_app:task_detail' <pk> %">link</a>
<pk>
将是一个整数,表示您要链接到的任务的 pk。在您的“index.html”中,您可能希望将“tasks.pk”放在这个位置而不是“”
【讨论】:
以上是关于我将如何为每个主题创建 URL 模式?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security - OAuth2 和 CustomAuthenticationProvider。如何为每个配置不同的 URL 模式?