0
votes

Comment rechercher par la méthode postale à Django

J'essaie d'afficher une page de résultats de recherche. Si la requête est trouvée, elle sera redirigée vers la page d'entrée. Sinon si une sous-chaîne de la requête est trouvée, une page de résultats de recherche sera affichée avec l'entrée indiquée sous forme de lien et si cliquez sur ce lien, la page d'entrée s'affiche. Voici mon code comme ci-dessous, s'il vous plaît aider:

urls.py: xxx

vues.py: xxx

layout.html: xxx

search.html xxx

q1: J'utilise la messagerie de la requête, car Je souhaite afficher l'URL comme / wiki / recherche de page de résultats de recherche, mais avec la méthode d'obtention de la méthode, l'URL sera comme? Q = &. Je suis un peu confus à propos de cette partie, car quand je cherche HTML à Wikipedia, l'URL sera comme: HTTPS : //fr.wikipedia.org/wiki/html , mais quand j'ai clic droit et inspecter la page, la méthode est "get".

q2: dois-je utiliser TypeError ici? Si l'utilisateur tapez l'URL comme wiki / Hello, et il n'y a pas de page d'entrée comme bonjour, alors la page d'erreur s'affiche, indiquant qu'il n'y a pas de page Hello.

Q3: Quand j'ai cherché, Signifie toujours la page d'erreur. Pourquoi? J'ai donné des arguments à la fonction d'entrée, mais il semble qu'il ne reçoit pas le bon argument.


2 commentaires

Je pense que je connais la réponse à propos de la question 2. Il devrait s'agir d'une TypeError, car dans un autre fichier Python, il y a une fonction ne renvoie aucun si l'utilisateur n'a que quelque chose dans l'URL non dans les entrées. J'avais raison. Veuillez ignorer cette question et aider avec les deux autres. Merci.


Je pense qu'il devrait y avoir une amélioration de la manière de réaliser un lien aléatoire. Je n'ai pas compris comment.


4 Réponses :


0
votes
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django import forms


from . import util
import markdown2

class NewEntryForm(forms.Form):
    title = forms.CharField(max_length=100)
    content = forms.CharField(widget=forms.Textarea)


class EditForm(forms.Form):
    title = forms.CharField(max_length=100, initial='title')
    Edit_Content = forms.CharField(widget=forms.Textarea, initial='content')



def index(request):
    if util.get_entry(request.GET.get("q")) is not None:
        return HttpResponseRedirect("/wiki/" + request.GET.get("q"))
    
    return render(request, "encyclopedia/index.html", {
        "entries": util.list_entries()
    })
    

def mdpage(request, title):
    if util.get_entry(request.GET.get("q")) is not None:
        return HttpResponseRedirect("/wiki/" + request.GET.get("q"))
    conversion = markdown2.markdown(util.get_entry(title))
    return render(request, "encyclopedia/mdpage.html", {
        "mdconvert" : conversion
    })

def create(request):
    if request.method == "POST":
        NewEntry = NewEntryForm(request.POST)
        if NewEntry.is_valid():
                title = NewEntry.cleaned_data['title']
                content = NewEntry.cleaned_data['content']
                if (title in util.list_entries()):
                    return HttpResponse ("Error Entry already exists")
                else:    
                    util.save_entry(title, content)
                    return render(request, "encyclopedia/index.html", {
                    "entries": util.list_entries()
                    })
        else:
            return render(request, "encyclopedia/createpage.html", {
             "NewEntry": NewEntry
            })
    else:
        return render(request, "encyclopedia/createpage.html", {
            "NewEntry": NewEntryForm()
        })

5 commentaires

Vous n'avez pas besoin de créer une page de boîte de recherche, car vous avez déjà créé la page avec la conversion de Markdown, il vous suffit de rediriger la page avec une condition IF,


Je prends ce cours maintenant et je suis coincé sur la page d'édition et une page aléatoire


Votre recherche fonctionne! Merci beaucoup! Pourriez-vous partager le lien sur où avez-vous trouvé la façon dont vous avez écrit cette partie: retour httpresponseredirect ("/ wiki /" + demande.get.get ("q")) . De plus, je pense que peut-être donner une fonction distincte est une meilleure idée, car nous sommes également tenus de rechercher des substrings et d'afficher une liste de page de résultats de recherche de sous-chaîne et cliquez sur le lien pour afficher la page d'entrée. J'ai fini de page aléatoire. Je suis heureux si vous le prenez pour votre référence, une meilleure façon d'écrire le code aurait pu être atteint si je pense.


Pour aléatoire si nous utilisons aléatoire.choice (), il nous enverra toujours à cette même page, à moins que je rende le programme. Y a-t-il une manière possible que chaque fois que nous cliquons sur une page aléatoire, cela nous amène à une page différente ??


Je ne comprends pas bien ce que tu veux dire. Ce que je comprends sur le hasard, c'est que nous devons donner la fonction une variable générée par hasard.choice () et donner cette variable à notre vue pour afficher la page de contenu du titre.



0
votes

Je connais la réponse à Q3: la commande par laquelle les URL dans URLS.PY sont créées.

Django recherchera un chemin de haut en bas, de sorte qu'il s'arrête à la fonction d'entrée comme deuxième et ne vous rendra pas au chemin de recherche ci-dessous. J'ai changé la commande et il ne montre pas la page d'erreur lorsque je recherche plus. Bien que la recherche ne fonctionne toujours pas. Besoin d'aide avec ça.


0 commentaires

0
votes

a résolu la fonction de recherche avec l'aide de Ralph Borgi, maintenant de la recherche de mots et de sous-chaînes de recherche.

Il devrait s'agir de la méthode, le seul problème m'a été bloqué, je ne savais pas comment faire l'URL "/ wiki / css" par exemple, sans le modèle de? q =. Le code est comme ci-dessous pour toute personne intéressée: xxx xxx


0 commentaires

0
votes
    from django.urls import path

from . import views

urlpatterns = [
    path("", views.index, name="index"),
    path("wiki/<str:title>", views.mdpage, name="entry"),
    path("createpage",views.create, name="create"),
    path("wiki/edit/<str:title>", views.edit, name="edit"),
]

0 commentaires